<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerf WG @ TPAC 2019</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerf WG @ TPAC 2019</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">ul.lst-kix_imn8r2awgiqm-6{list-style-type:none}ul.lst-kix_imn8r2awgiqm-5{list-style-type:none}.lst-kix_d1wgd7jn6u4a-1>li:before{content:"+  "}.lst-kix_d1wgd7jn6u4a-2>li:before{content:"+  "}ul.lst-kix_imn8r2awgiqm-4{list-style-type:none}ul.lst-kix_imn8r2awgiqm-3{list-style-type:none}ul.lst-kix_imn8r2awgiqm-2{list-style-type:none}ul.lst-kix_imn8r2awgiqm-1{list-style-type:none}.lst-kix_d1wgd7jn6u4a-3>li:before{content:"+  "}ul.lst-kix_imn8r2awgiqm-0{list-style-type:none}.lst-kix_d1wgd7jn6u4a-5>li:before{content:"+  "}.lst-kix_d1wgd7jn6u4a-6>li:before{content:"+  "}.lst-kix_d1wgd7jn6u4a-4>li:before{content:"+  "}ul.lst-kix_imn8r2awgiqm-8{list-style-type:none}ul.lst-kix_imn8r2awgiqm-7{list-style-type:none}.lst-kix_8lttz4569w3b-4>li:before{content:"\0025cb  "}.lst-kix_8lttz4569w3b-5>li:before{content:"\0025a0  "}.lst-kix_8lttz4569w3b-6>li:before{content:"\0025cf  "}.lst-kix_8lttz4569w3b-8>li:before{content:"\0025a0  "}.lst-kix_8lttz4569w3b-7>li:before{content:"\0025cb  "}.lst-kix_d2ax6n1cg0h6-7>li:before{content:"\0025cb  "}.lst-kix_d2ax6n1cg0h6-8>li:before{content:"\0025a0  "}.lst-kix_d1wgd7jn6u4a-0>li:before{content:"+  "}.lst-kix_5pyw9e9a75ls-3>li:before{content:"+  "}.lst-kix_d2ax6n1cg0h6-5>li:before{content:"\0025a0  "}.lst-kix_d2ax6n1cg0h6-6>li:before{content:"\0025cf  "}.lst-kix_5pyw9e9a75ls-2>li:before{content:"+  "}.lst-kix_5pyw9e9a75ls-6>li:before{content:"+  "}.lst-kix_d2ax6n1cg0h6-2>li:before{content:"\0025a0  "}.lst-kix_d2ax6n1cg0h6-3>li:before{content:"\0025cf  "}.lst-kix_vuwoxliz439h-6>li:before{content:"-  "}.lst-kix_5pyw9e9a75ls-5>li:before{content:"+  "}.lst-kix_d2ax6n1cg0h6-4>li:before{content:"\0025cb  "}.lst-kix_5pyw9e9a75ls-4>li:before{content:"+  "}.lst-kix_vuwoxliz439h-7>li:before{content:"-  "}.lst-kix_8lttz4569w3b-3>li:before{content:"\0025cf  "}.lst-kix_vuwoxliz439h-8>li:before{content:"-  "}.lst-kix_8lttz4569w3b-2>li:before{content:"\0025a0  "}ol.lst-kix_3e8hkaak24u1-5.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-5 0}.lst-kix_d1wgd7jn6u4a-7>li:before{content:"+  "}.lst-kix_5pyw9e9a75ls-7>li:before{content:"+  "}.lst-kix_8lttz4569w3b-0>li:before{content:"\0025cf  "}.lst-kix_d2ax6n1cg0h6-1>li:before{content:"\0025cb  "}.lst-kix_8lttz4569w3b-1>li:before{content:"\0025cb  "}.lst-kix_d2ax6n1cg0h6-0>li:before{content:"\0025cf  "}.lst-kix_d1wgd7jn6u4a-8>li:before{content:"+  "}.lst-kix_5pyw9e9a75ls-8>li:before{content:"+  "}.lst-kix_bljincqjyzs0-6>li:before{content:"\0025cf  "}.lst-kix_bljincqjyzs0-7>li:before{content:"\0025cb  "}.lst-kix_bljincqjyzs0-3>li:before{content:"\0025cf  "}.lst-kix_bljincqjyzs0-4>li:before{content:"\0025cb  "}.lst-kix_bljincqjyzs0-5>li:before{content:"\0025a0  "}.lst-kix_bljincqjyzs0-8>li:before{content:"\0025a0  "}ol.lst-kix_3e8hkaak24u1-0.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-0 0}.lst-kix_3e8hkaak24u1-0>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-0}.lst-kix_mgacuusuhumg-0>li:before{content:"\0025cf  "}.lst-kix_t98xjwd1smqf-2>li:before{content:"+  "}.lst-kix_t98xjwd1smqf-4>li:before{content:"+  "}.lst-kix_t98xjwd1smqf-6>li:before{content:"+  "}ul.lst-kix_8bt0fje9mgmq-4{list-style-type:none}ul.lst-kix_8bt0fje9mgmq-3{list-style-type:none}ul.lst-kix_8bt0fje9mgmq-2{list-style-type:none}ul.lst-kix_8bt0fje9mgmq-1{list-style-type:none}ul.lst-kix_8bt0fje9mgmq-0{list-style-type:none}.lst-kix_t98xjwd1smqf-8>li:before{content:"+  "}.lst-kix_mgacuusuhumg-8>li:before{content:"\0025a0  "}.lst-kix_mgacuusuhumg-4>li:before{content:"\0025cb  "}.lst-kix_mgacuusuhumg-2>li:before{content:"\0025a0  "}.lst-kix_mgacuusuhumg-6>li:before{content:"\0025cf  "}.lst-kix_bljincqjyzs0-2>li:before{content:"\0025a0  "}.lst-kix_bljincqjyzs0-0>li:before{content:"\0025cf  "}ul.lst-kix_fi8kddlj9rbv-7{list-style-type:none}.lst-kix_4yi9ah5123x9-3>li:before{content:"\0025cf  "}ul.lst-kix_fi8kddlj9rbv-6{list-style-type:none}ul.lst-kix_fi8kddlj9rbv-5{list-style-type:none}ul.lst-kix_fi8kddlj9rbv-4{list-style-type:none}ul.lst-kix_fi8kddlj9rbv-3{list-style-type:none}ul.lst-kix_fi8kddlj9rbv-2{list-style-type:none}ul.lst-kix_fi8kddlj9rbv-1{list-style-type:none}ul.lst-kix_fi8kddlj9rbv-0{list-style-type:none}.lst-kix_4yi9ah5123x9-7>li:before{content:"\0025cb  "}.lst-kix_4yi9ah5123x9-1>li:before{content:"\0025cb  "}ul.lst-kix_fi8kddlj9rbv-8{list-style-type:none}.lst-kix_vuwoxliz439h-5>li:before{content:"-  "}.lst-kix_5pyw9e9a75ls-1>li:before{content:"+  "}ul.lst-kix_8bt0fje9mgmq-8{list-style-type:none}ul.lst-kix_8bt0fje9mgmq-7{list-style-type:none}.lst-kix_pe9j1dva1e2f-2>li:before{content:"\0025a0  "}.lst-kix_4yi9ah5123x9-5>li:before{content:"\0025a0  "}ul.lst-kix_8bt0fje9mgmq-6{list-style-type:none}.lst-kix_vuwoxliz439h-3>li:before{content:"-  "}ul.lst-kix_8bt0fje9mgmq-5{list-style-type:none}.lst-kix_pe9j1dva1e2f-0>li:before{content:"\0025cf  "}ul.lst-kix_2llezu98mfz9-1{list-style-type:none}ul.lst-kix_2llezu98mfz9-0{list-style-type:none}ul.lst-kix_2llezu98mfz9-3{list-style-type:none}.lst-kix_vuwoxliz439h-1>li:before{content:"-  "}ul.lst-kix_2llezu98mfz9-2{list-style-type:none}ul.lst-kix_2llezu98mfz9-5{list-style-type:none}ul.lst-kix_2llezu98mfz9-4{list-style-type:none}ul.lst-kix_2llezu98mfz9-7{list-style-type:none}ul.lst-kix_2llezu98mfz9-6{list-style-type:none}ul.lst-kix_2llezu98mfz9-8{list-style-type:none}ul.lst-kix_t98xjwd1smqf-0{list-style-type:none}ul.lst-kix_t98xjwd1smqf-2{list-style-type:none}.lst-kix_tbf4cq2mnbzk-0>li:before{content:"\0025cf  "}ul.lst-kix_t98xjwd1smqf-1{list-style-type:none}.lst-kix_tbf4cq2mnbzk-7>li:before{content:"\0025cb  "}.lst-kix_tbf4cq2mnbzk-8>li:before{content:"\0025a0  "}.lst-kix_r0dvroh27d45-6>li:before{content:"\0025cf  "}ul.lst-kix_t98xjwd1smqf-8{list-style-type:none}ul.lst-kix_t98xjwd1smqf-7{list-style-type:none}.lst-kix_r0dvroh27d45-5>li:before{content:"\0025a0  "}ul.lst-kix_t98xjwd1smqf-4{list-style-type:none}ul.lst-kix_t98xjwd1smqf-3{list-style-type:none}ul.lst-kix_t98xjwd1smqf-6{list-style-type:none}ul.lst-kix_t98xjwd1smqf-5{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-3{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-2{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-5{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-4{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-1{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-0{list-style-type:none}.lst-kix_pe9j1dva1e2f-4>li:before{content:"\0025cb  "}.lst-kix_pe9j1dva1e2f-5>li:before{content:"\0025a0  "}.lst-kix_pe9j1dva1e2f-8>li:before{content:"\0025a0  "}.lst-kix_3e8hkaak24u1-1>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-1}.lst-kix_ybqxjefziic9-0>li:before{content:"\0025cf  "}.lst-kix_ybqxjefziic9-4>li:before{content:"\0025cb  "}.lst-kix_8bt0fje9mgmq-0>li:before{content:"-  "}.lst-kix_ybqxjefziic9-1>li:before{content:"\0025cb  "}.lst-kix_ybqxjefziic9-5>li:before{content:"\0025a0  "}ul.lst-kix_2xj1mqw8bfhm-7{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-6{list-style-type:none}ul.lst-kix_2xj1mqw8bfhm-8{list-style-type:none}.lst-kix_r0dvroh27d45-2>li:before{content:"\0025a0  "}.lst-kix_mh7e4mkizsn7-8>li:before{content:"-  "}.lst-kix_r0dvroh27d45-1>li:before{content:"\0025cb  "}.lst-kix_8bt0fje9mgmq-8>li:before{content:"-  "}.lst-kix_mh7e4mkizsn7-5>li:before{content:"-  "}.lst-kix_ybqxjefziic9-8>li:before{content:"\0025a0  "}.lst-kix_8bt0fje9mgmq-3>li:before{content:"-  "}.lst-kix_mh7e4mkizsn7-0>li:before{content:"-  "}.lst-kix_8bt0fje9mgmq-4>li:before{content:"-  "}.lst-kix_mh7e4mkizsn7-1>li:before{content:"-  "}.lst-kix_t98xjwd1smqf-0>li:before{content:"+  "}.lst-kix_mh7e4mkizsn7-4>li:before{content:"-  "}.lst-kix_tbf4cq2mnbzk-4>li:before{content:"\0025cb  "}.lst-kix_8bt0fje9mgmq-7>li:before{content:"-  "}.lst-kix_tbf4cq2mnbzk-3>li:before{content:"\0025cf  "}.lst-kix_mgacuusuhumg-1>li:before{content:"\0025cb  "}.lst-kix_7ovu51st6e9x-7>li:before{content:"\0025cb  "}.lst-kix_gbtnpw2azggi-1>li:before{content:"\0025cb  "}.lst-kix_3e8hkaak24u1-8>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-8}.lst-kix_t98xjwd1smqf-3>li:before{content:"+  "}.lst-kix_amyr41murg23-5>li:before{content:"+  "}.lst-kix_t98xjwd1smqf-7>li:before{content:"+  "}.lst-kix_7ovu51st6e9x-3>li:before{content:"\0025cf  "}.lst-kix_gbtnpw2azggi-5>li:before{content:"\0025a0  "}ul.lst-kix_7ovu51st6e9x-5{list-style-type:none}ul.lst-kix_7ovu51st6e9x-6{list-style-type:none}.lst-kix_mgacuusuhumg-5>li:before{content:"\0025a0  "}ul.lst-kix_7ovu51st6e9x-3{list-style-type:none}ul.lst-kix_7ovu51st6e9x-4{list-style-type:none}ul.lst-kix_7ovu51st6e9x-1{list-style-type:none}ul.lst-kix_7ovu51st6e9x-2{list-style-type:none}ul.lst-kix_7ovu51st6e9x-0{list-style-type:none}.lst-kix_bljincqjyzs0-1>li:before{content:"\0025cb  "}ul.lst-kix_7ovu51st6e9x-7{list-style-type:none}ul.lst-kix_7ovu51st6e9x-8{list-style-type:none}.lst-kix_4yi9ah5123x9-4>li:before{content:"\0025cb  "}.lst-kix_yq56unpfmf0s-2>li:before{content:"\0025a0  "}.lst-kix_wyjway4ccmes-2>li:before{content:"+  "}.lst-kix_imn8r2awgiqm-2>li:before{content:"-  "}.lst-kix_4yi9ah5123x9-0>li:before{content:"\0025cf  "}.lst-kix_4yi9ah5123x9-8>li:before{content:"\0025a0  "}.lst-kix_wyjway4ccmes-6>li:before{content:"+  "}.lst-kix_vuwoxliz439h-4>li:before{content:"-  "}.lst-kix_pe9j1dva1e2f-1>li:before{content:"\0025cb  "}.lst-kix_vuwoxliz439h-0>li:before{content:"-  "}.lst-kix_amyr41murg23-1>li:before{content:"+  "}.lst-kix_imn8r2awgiqm-6>li:before{content:"-  "}.lst-kix_yq56unpfmf0s-6>li:before{content:"\0025cf  "}.lst-kix_4sa2tkz4jseq-5>li:before{content:"\0025a0  "}.lst-kix_4sa2tkz4jseq-2>li:before{content:"\0025a0  "}.lst-kix_4sa2tkz4jseq-8>li:before{content:"\0025a0  "}.lst-kix_4sa2tkz4jseq-7>li:before{content:"\0025cb  "}.lst-kix_96kta2oflxbn-0>li:before{content:"\0025cf  "}.lst-kix_96kta2oflxbn-2>li:before{content:"\0025a0  "}.lst-kix_96kta2oflxbn-8>li:before{content:"\0025a0  "}.lst-kix_96kta2oflxbn-7>li:before{content:"\0025cb  "}.lst-kix_4sa2tkz4jseq-0>li:before{content:"\0025cf  "}.lst-kix_96kta2oflxbn-5>li:before{content:"\0025a0  "}.lst-kix_6yo0xjp73nx7-4>li:before{content:"-  "}.lst-kix_gbtnpw2azggi-6>li:before{content:"\0025cf  "}.lst-kix_gbtnpw2azggi-0>li:before{content:"\0025cf  "}.lst-kix_gbtnpw2azggi-8>li:before{content:"\0025a0  "}.lst-kix_7ovu51st6e9x-8>li:before{content:"\0025a0  "}.lst-kix_7ovu51st6e9x-2>li:before{content:"\0025a0  "}.lst-kix_12ugnkenvcz0-1>li:before{content:"+  "}.lst-kix_amyr41murg23-4>li:before{content:"+  "}.lst-kix_ze4pl2ewl5ws-7>li:before{content:"\0025cb  "}.lst-kix_6yo0xjp73nx7-6>li:before{content:"-  "}ul.lst-kix_ybqxjefziic9-2{list-style-type:none}.lst-kix_6t9zzhcnhw0j-3>li:before{content:"\0025cf  "}ul.lst-kix_ybqxjefziic9-3{list-style-type:none}ul.lst-kix_ybqxjefziic9-0{list-style-type:none}ul.lst-kix_ybqxjefziic9-1{list-style-type:none}.lst-kix_ze4pl2ewl5ws-5>li:before{content:"\0025a0  "}ul.lst-kix_ybqxjefziic9-8{list-style-type:none}ul.lst-kix_ybqxjefziic9-6{list-style-type:none}ul.lst-kix_ybqxjefziic9-7{list-style-type:none}ul.lst-kix_ybqxjefziic9-4{list-style-type:none}ul.lst-kix_ybqxjefziic9-5{list-style-type:none}.lst-kix_a9brwreve9ax-8>li:before{content:"\0025a0  "}.lst-kix_a9brwreve9ax-6>li:before{content:"\0025cf  "}.lst-kix_6t9zzhcnhw0j-1>li:before{content:"\0025cb  "}.lst-kix_a9brwreve9ax-0>li:before{content:"\0025cf  "}ul.lst-kix_ze4pl2ewl5ws-8{list-style-type:none}ul.lst-kix_ze4pl2ewl5ws-7{list-style-type:none}ul.lst-kix_ze4pl2ewl5ws-6{list-style-type:none}ul.lst-kix_ze4pl2ewl5ws-5{list-style-type:none}.lst-kix_siqrcxh2flzf-0>li:before{content:"+  "}.lst-kix_yq56unpfmf0s-1>li:before{content:"\0025cb  "}ul.lst-kix_ze4pl2ewl5ws-0{list-style-type:none}.lst-kix_imn8r2awgiqm-1>li:before{content:"-  "}.lst-kix_7zgpqb8b5pic-4>li:before{content:"\0025cb  "}ul.lst-kix_ze4pl2ewl5ws-4{list-style-type:none}ul.lst-kix_ze4pl2ewl5ws-3{list-style-type:none}ul.lst-kix_ze4pl2ewl5ws-2{list-style-type:none}ul.lst-kix_ze4pl2ewl5ws-1{list-style-type:none}.lst-kix_wyjway4ccmes-7>li:before{content:"+  "}.lst-kix_siqrcxh2flzf-8>li:before{content:"+  "}.lst-kix_7zgpqb8b5pic-2>li:before{content:"\0025a0  "}ul.lst-kix_kemroksgnj5h-0{list-style-type:none}ul.lst-kix_kemroksgnj5h-1{list-style-type:none}ul.lst-kix_kemroksgnj5h-2{list-style-type:none}ul.lst-kix_kemroksgnj5h-3{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-7{list-style-type:none}ul.lst-kix_kemroksgnj5h-4{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-8{list-style-type:none}ul.lst-kix_kemroksgnj5h-5{list-style-type:none}ul.lst-kix_kemroksgnj5h-6{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-8{list-style-type:none}ul.lst-kix_kemroksgnj5h-7{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-3{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-7{list-style-type:none}ul.lst-kix_kemroksgnj5h-8{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-4{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-5{list-style-type:none}.lst-kix_v5mwjiklz8gv-3>li:before{content:"\0025cf  "}ul.lst-kix_v5mwjiklz8gv-6{list-style-type:none}.lst-kix_amyr41murg23-2>li:before{content:"+  "}ul.lst-kix_v5mwjiklz8gv-0{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-1{list-style-type:none}ul.lst-kix_v5mwjiklz8gv-2{list-style-type:none}.lst-kix_7ovu51st6e9x-0>li:before{content:"\0025cf  "}.lst-kix_siqrcxh2flzf-6>li:before{content:"+  "}.lst-kix_imn8r2awgiqm-7>li:before{content:"-  "}ul.lst-kix_tbf4cq2mnbzk-4{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-3{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-6{list-style-type:none}.lst-kix_wyjway4ccmes-1>li:before{content:"+  "}ul.lst-kix_tbf4cq2mnbzk-5{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-0{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-2{list-style-type:none}ul.lst-kix_tbf4cq2mnbzk-1{list-style-type:none}.lst-kix_yq56unpfmf0s-7>li:before{content:"\0025cb  "}.lst-kix_v5mwjiklz8gv-5>li:before{content:"\0025a0  "}.lst-kix_tbf4cq2mnbzk-1>li:before{content:"\0025cb  "}.lst-kix_tbf4cq2mnbzk-6>li:before{content:"\0025cf  "}.lst-kix_cm8haizdird2-8>li:before{content:"-  "}ul.lst-kix_a9brwreve9ax-0{list-style-type:none}ul.lst-kix_bljincqjyzs0-8{list-style-type:none}ul.lst-kix_a9brwreve9ax-1{list-style-type:none}ul.lst-kix_bljincqjyzs0-7{list-style-type:none}.lst-kix_cm8haizdird2-5>li:before{content:"-  "}ul.lst-kix_bljincqjyzs0-6{list-style-type:none}ul.lst-kix_bljincqjyzs0-5{list-style-type:none}ul.lst-kix_bljincqjyzs0-4{list-style-type:none}ul.lst-kix_bljincqjyzs0-3{list-style-type:none}ul.lst-kix_bljincqjyzs0-2{list-style-type:none}.lst-kix_r0dvroh27d45-7>li:before{content:"\0025cb  "}ul.lst-kix_bljincqjyzs0-1{list-style-type:none}ul.lst-kix_bljincqjyzs0-0{list-style-type:none}ul.lst-kix_a9brwreve9ax-6{list-style-type:none}ul.lst-kix_a9brwreve9ax-7{list-style-type:none}ul.lst-kix_a9brwreve9ax-8{list-style-type:none}ul.lst-kix_a9brwreve9ax-2{list-style-type:none}ul.lst-kix_a9brwreve9ax-3{list-style-type:none}ul.lst-kix_a9brwreve9ax-4{list-style-type:none}ul.lst-kix_a9brwreve9ax-5{list-style-type:none}.lst-kix_pe9j1dva1e2f-7>li:before{content:"\0025cb  "}.lst-kix_8bt0fje9mgmq-1>li:before{content:"-  "}.lst-kix_ybqxjefziic9-3>li:before{content:"\0025cf  "}.lst-kix_mh7e4mkizsn7-7>li:before{content:"-  "}.lst-kix_r0dvroh27d45-4>li:before{content:"\0025cb  "}.lst-kix_ybqxjefziic9-6>li:before{content:"\0025cf  "}.lst-kix_2llezu98mfz9-6>li:before{content:"\0025cf  "}.lst-kix_cm8haizdird2-0>li:before{content:"-  "}ul.lst-kix_6yo0xjp73nx7-3{list-style-type:none}ul.lst-kix_6yo0xjp73nx7-2{list-style-type:none}ul.lst-kix_6yo0xjp73nx7-5{list-style-type:none}ul.lst-kix_6yo0xjp73nx7-4{list-style-type:none}ul.lst-kix_6yo0xjp73nx7-7{list-style-type:none}ul.lst-kix_6yo0xjp73nx7-6{list-style-type:none}ul.lst-kix_6yo0xjp73nx7-8{list-style-type:none}.lst-kix_8bt0fje9mgmq-6>li:before{content:"-  "}.lst-kix_mh7e4mkizsn7-2>li:before{content:"-  "}ul.lst-kix_6yo0xjp73nx7-1{list-style-type:none}.lst-kix_2llezu98mfz9-1>li:before{content:"\0025cb  "}ul.lst-kix_6yo0xjp73nx7-0{list-style-type:none}.lst-kix_12ugnkenvcz0-6>li:before{content:"+  "}.lst-kix_gbtnpw2azggi-3>li:before{content:"\0025cf  "}.lst-kix_6yo0xjp73nx7-1>li:before{content:"-  "}.lst-kix_t98xjwd1smqf-5>li:before{content:"+  "}.lst-kix_7ovu51st6e9x-5>li:before{content:"\0025a0  "}.lst-kix_xk57rvssn6lu-0>li:before{content:"+  "}.lst-kix_amyr41murg23-7>li:before{content:"+  "}ul.lst-kix_r0dvroh27d45-6{list-style-type:none}ul.lst-kix_r0dvroh27d45-7{list-style-type:none}ul.lst-kix_r0dvroh27d45-4{list-style-type:none}.lst-kix_ze4pl2ewl5ws-2>li:before{content:"\0025a0  "}ul.lst-kix_r0dvroh27d45-5{list-style-type:none}ul.lst-kix_r0dvroh27d45-8{list-style-type:none}ol.lst-kix_3e8hkaak24u1-5{list-style-type:none}.lst-kix_6t9zzhcnhw0j-6>li:before{content:"\0025cf  "}ol.lst-kix_3e8hkaak24u1-6{list-style-type:none}ol.lst-kix_3e8hkaak24u1-3{list-style-type:none}ol.lst-kix_3e8hkaak24u1-4{list-style-type:none}ul.lst-kix_r0dvroh27d45-2{list-style-type:none}ol.lst-kix_3e8hkaak24u1-1{list-style-type:none}ul.lst-kix_r0dvroh27d45-3{list-style-type:none}ol.lst-kix_3e8hkaak24u1-2{list-style-type:none}.lst-kix_mgacuusuhumg-7>li:before{content:"\0025cb  "}ul.lst-kix_r0dvroh27d45-0{list-style-type:none}ul.lst-kix_r0dvroh27d45-1{list-style-type:none}.lst-kix_wxewwta1hpt8-3>li:before{content:"\0025cf  "}ol.lst-kix_3e8hkaak24u1-0{list-style-type:none}ul.lst-kix_b7mv6vvstec2-1{list-style-type:none}ul.lst-kix_b7mv6vvstec2-0{list-style-type:none}ul.lst-kix_b7mv6vvstec2-5{list-style-type:none}ul.lst-kix_b7mv6vvstec2-4{list-style-type:none}.lst-kix_zhz9l2jrpurr-1>li:before{content:"+  "}ul.lst-kix_b7mv6vvstec2-3{list-style-type:none}.lst-kix_7zgpqb8b5pic-7>li:before{content:"\0025cb  "}ul.lst-kix_b7mv6vvstec2-2{list-style-type:none}.lst-kix_3e8hkaak24u1-7>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-7}.lst-kix_vmgrc4z9xzgi-2>li:before{content:"\0025a0  "}.lst-kix_yq56unpfmf0s-4>li:before{content:"\0025cb  "}.lst-kix_4yi9ah5123x9-6>li:before{content:"\0025cf  "}ul.lst-kix_b7mv6vvstec2-8{list-style-type:none}.lst-kix_a9brwreve9ax-3>li:before{content:"\0025cf  "}ul.lst-kix_b7mv6vvstec2-7{list-style-type:none}ul.lst-kix_b7mv6vvstec2-6{list-style-type:none}.lst-kix_wyjway4ccmes-4>li:before{content:"+  "}ol.lst-kix_3e8hkaak24u1-7{list-style-type:none}ol.lst-kix_3e8hkaak24u1-8{list-style-type:none}.lst-kix_b7mv6vvstec2-0>li:before{content:"+  "}.lst-kix_3e8hkaak24u1-7>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-7,lower-latin) ". "}.lst-kix_v5mwjiklz8gv-0>li:before{content:"\0025cf  "}.lst-kix_2xj1mqw8bfhm-1>li:before{content:"-  "}.lst-kix_fi8kddlj9rbv-7>li:before{content:"\0025cb  "}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}.lst-kix_v5mwjiklz8gv-8>li:before{content:"\0025a0  "}.lst-kix_imn8r2awgiqm-4>li:before{content:"-  "}.lst-kix_b7mv6vvstec2-8>li:before{content:"+  "}.lst-kix_siqrcxh2flzf-3>li:before{content:"+  "}.lst-kix_go27jn1bszn4-0>li:before{content:"+  "}.lst-kix_go27jn1bszn4-2>li:before{content:"+  "}.lst-kix_7inyfcyskz6s-0>li:before{content:"\0025cf  "}.lst-kix_go27jn1bszn4-3>li:before{content:"+  "}.lst-kix_7inyfcyskz6s-1>li:before{content:"\0025cb  "}.lst-kix_7inyfcyskz6s-2>li:before{content:"\0025a0  "}.lst-kix_go27jn1bszn4-4>li:before{content:"+  "}.lst-kix_go27jn1bszn4-6>li:before{content:"+  "}.lst-kix_7inyfcyskz6s-3>li:before{content:"\0025cf  "}.lst-kix_go27jn1bszn4-5>li:before{content:"+  "}.lst-kix_go27jn1bszn4-8>li:before{content:"+  "}ul.lst-kix_yq56unpfmf0s-5{list-style-type:none}ul.lst-kix_yq56unpfmf0s-6{list-style-type:none}ul.lst-kix_yq56unpfmf0s-7{list-style-type:none}.lst-kix_go27jn1bszn4-7>li:before{content:"+  "}ul.lst-kix_yq56unpfmf0s-8{list-style-type:none}ul.lst-kix_yq56unpfmf0s-1{list-style-type:none}ul.lst-kix_yq56unpfmf0s-2{list-style-type:none}ul.lst-kix_yq56unpfmf0s-3{list-style-type:none}ul.lst-kix_yq56unpfmf0s-4{list-style-type:none}ul.lst-kix_yq56unpfmf0s-0{list-style-type:none}.lst-kix_tedzjqu0enah-2>li:before{content:"-  "}.lst-kix_tedzjqu0enah-1>li:before{content:"-  "}.lst-kix_tedzjqu0enah-3>li:before{content:"-  "}.lst-kix_ut4h596m3lcb-2>li:before{content:"-  "}.lst-kix_tedzjqu0enah-7>li:before{content:"-  "}.lst-kix_ut4h596m3lcb-1>li:before{content:"-  "}.lst-kix_tedzjqu0enah-0>li:before{content:"-  "}.lst-kix_tedzjqu0enah-8>li:before{content:"-  "}.lst-kix_ut4h596m3lcb-0>li:before{content:"-  "}ul.lst-kix_d2ax6n1cg0h6-8{list-style-type:none}ul.lst-kix_d2ax6n1cg0h6-7{list-style-type:none}.lst-kix_7inyfcyskz6s-5>li:before{content:"\0025a0  "}.lst-kix_7inyfcyskz6s-6>li:before{content:"\0025cf  "}ul.lst-kix_d2ax6n1cg0h6-4{list-style-type:none}ul.lst-kix_d2ax6n1cg0h6-3{list-style-type:none}.lst-kix_7inyfcyskz6s-4>li:before{content:"\0025cb  "}.lst-kix_7inyfcyskz6s-8>li:before{content:"\0025a0  "}ul.lst-kix_d2ax6n1cg0h6-6{list-style-type:none}ul.lst-kix_d2ax6n1cg0h6-5{list-style-type:none}ul.lst-kix_d2ax6n1cg0h6-0{list-style-type:none}.lst-kix_tedzjqu0enah-6>li:before{content:"-  "}ul.lst-kix_d2ax6n1cg0h6-2{list-style-type:none}.lst-kix_tedzjqu0enah-5>li:before{content:"-  "}ul.lst-kix_d2ax6n1cg0h6-1{list-style-type:none}.lst-kix_tedzjqu0enah-4>li:before{content:"-  "}.lst-kix_7inyfcyskz6s-7>li:before{content:"\0025cb  "}.lst-kix_3e8hkaak24u1-4>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-4}.lst-kix_go27jn1bszn4-1>li:before{content:"+  "}.lst-kix_kemroksgnj5h-3>li:before{content:"-  "}ul.lst-kix_wxewwta1hpt8-0{list-style-type:none}ul.lst-kix_wxewwta1hpt8-3{list-style-type:none}.lst-kix_kemroksgnj5h-1>li:before{content:"-  "}.lst-kix_kemroksgnj5h-5>li:before{content:"-  "}ul.lst-kix_wxewwta1hpt8-4{list-style-type:none}ul.lst-kix_wxewwta1hpt8-1{list-style-type:none}.lst-kix_kemroksgnj5h-0>li:before{content:"-  "}.lst-kix_kemroksgnj5h-4>li:before{content:"-  "}ul.lst-kix_wxewwta1hpt8-2{list-style-type:none}.lst-kix_kemroksgnj5h-7>li:before{content:"-  "}.lst-kix_b6edx5l9nuj7-0>li:before{content:"\0025cf  "}.lst-kix_b6edx5l9nuj7-1>li:before{content:"\0025cb  "}.lst-kix_b6edx5l9nuj7-2>li:before{content:"\0025a0  "}.lst-kix_kemroksgnj5h-6>li:before{content:"-  "}.lst-kix_b6edx5l9nuj7-4>li:before{content:"\0025cb  "}.lst-kix_b6edx5l9nuj7-5>li:before{content:"\0025a0  "}.lst-kix_b6edx5l9nuj7-3>li:before{content:"\0025cf  "}.lst-kix_b6edx5l9nuj7-7>li:before{content:"\0025cb  "}ul.lst-kix_wxewwta1hpt8-7{list-style-type:none}ul.lst-kix_wxewwta1hpt8-8{list-style-type:none}ul.lst-kix_wxewwta1hpt8-5{list-style-type:none}ul.lst-kix_wxewwta1hpt8-6{list-style-type:none}.lst-kix_b6edx5l9nuj7-6>li:before{content:"\0025cf  "}.lst-kix_kemroksgnj5h-2>li:before{content:"-  "}ul.lst-kix_wyjway4ccmes-7{list-style-type:none}ul.lst-kix_wyjway4ccmes-8{list-style-type:none}ul.lst-kix_wyjway4ccmes-5{list-style-type:none}ul.lst-kix_wyjway4ccmes-6{list-style-type:none}ul.lst-kix_wyjway4ccmes-3{list-style-type:none}ul.lst-kix_wyjway4ccmes-4{list-style-type:none}.lst-kix_b6edx5l9nuj7-8>li:before{content:"\0025a0  "}ul.lst-kix_wyjway4ccmes-1{list-style-type:none}ul.lst-kix_wyjway4ccmes-2{list-style-type:none}.lst-kix_xk57rvssn6lu-6>li:before{content:"+  "}ul.lst-kix_wyjway4ccmes-0{list-style-type:none}.lst-kix_xk57rvssn6lu-7>li:before{content:"+  "}ul.lst-kix_tedzjqu0enah-2{list-style-type:none}ul.lst-kix_tedzjqu0enah-3{list-style-type:none}ul.lst-kix_tedzjqu0enah-0{list-style-type:none}.lst-kix_xk57rvssn6lu-8>li:before{content:"+  "}ul.lst-kix_tedzjqu0enah-1{list-style-type:none}ul.lst-kix_tedzjqu0enah-6{list-style-type:none}ul.lst-kix_tedzjqu0enah-7{list-style-type:none}ul.lst-kix_tedzjqu0enah-4{list-style-type:none}ul.lst-kix_tedzjqu0enah-5{list-style-type:none}.lst-kix_xk57rvssn6lu-5>li:before{content:"+  "}.lst-kix_vmgrc4z9xzgi-7>li:before{content:"\0025cb  "}ol.lst-kix_3e8hkaak24u1-3.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-3 0}.lst-kix_xk57rvssn6lu-3>li:before{content:"+  "}ul.lst-kix_b6edx5l9nuj7-7{list-style-type:none}ul.lst-kix_b6edx5l9nuj7-6{list-style-type:none}.lst-kix_xk57rvssn6lu-1>li:before{content:"+  "}ul.lst-kix_b6edx5l9nuj7-5{list-style-type:none}.lst-kix_wxewwta1hpt8-4>li:before{content:"\0025cb  "}ul.lst-kix_b6edx5l9nuj7-4{list-style-type:none}ul.lst-kix_b6edx5l9nuj7-3{list-style-type:none}ul.lst-kix_b6edx5l9nuj7-2{list-style-type:none}ul.lst-kix_b6edx5l9nuj7-1{list-style-type:none}ul.lst-kix_b6edx5l9nuj7-0{list-style-type:none}.lst-kix_wxewwta1hpt8-6>li:before{content:"\0025cf  "}.lst-kix_wxewwta1hpt8-8>li:before{content:"\0025a0  "}ul.lst-kix_b6edx5l9nuj7-8{list-style-type:none}.lst-kix_zhz9l2jrpurr-6>li:before{content:"+  "}.lst-kix_zhz9l2jrpurr-4>li:before{content:"+  "}.lst-kix_zhz9l2jrpurr-8>li:before{content:"+  "}.lst-kix_vmgrc4z9xzgi-3>li:before{content:"\0025cf  "}.lst-kix_wxewwta1hpt8-2>li:before{content:"\0025a0  "}.lst-kix_zhz9l2jrpurr-0>li:before{content:"+  "}.lst-kix_vmgrc4z9xzgi-1>li:before{content:"\0025cb  "}.lst-kix_vmgrc4z9xzgi-5>li:before{content:"\0025a0  "}.lst-kix_zhz9l2jrpurr-2>li:before{content:"+  "}ul.lst-kix_tedzjqu0enah-8{list-style-type:none}.lst-kix_wxewwta1hpt8-0>li:before{content:"\0025cf  "}.lst-kix_ut4h596m3lcb-5>li:before{content:"-  "}.lst-kix_ut4h596m3lcb-7>li:before{content:"-  "}.lst-kix_b7mv6vvstec2-3>li:before{content:"+  "}.lst-kix_b7mv6vvstec2-1>li:before{content:"+  "}.lst-kix_ut4h596m3lcb-3>li:before{content:"-  "}.lst-kix_3e8hkaak24u1-8>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-8,lower-roman) ". "}.lst-kix_fi8kddlj9rbv-8>li:before{content:"\0025a0  "}.lst-kix_2xj1mqw8bfhm-4>li:before{content:"-  "}.lst-kix_2xj1mqw8bfhm-6>li:before{content:"-  "}.lst-kix_3e8hkaak24u1-6>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-6,decimal) ". "}.lst-kix_fi8kddlj9rbv-6>li:before{content:"\0025cf  "}.lst-kix_2xj1mqw8bfhm-0>li:before{content:"-  "}.lst-kix_2xj1mqw8bfhm-2>li:before{content:"-  "}.lst-kix_2xj1mqw8bfhm-8>li:before{content:"-  "}.lst-kix_3e8hkaak24u1-0>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-0,decimal) ". "}.lst-kix_b7mv6vvstec2-5>li:before{content:"+  "}.lst-kix_fi8kddlj9rbv-0>li:before{content:"\0025cf  "}ul.lst-kix_d1wgd7jn6u4a-0{list-style-type:none}.lst-kix_3e8hkaak24u1-2>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-2,lower-roman) ". "}.lst-kix_b7mv6vvstec2-7>li:before{content:"+  "}.lst-kix_fi8kddlj9rbv-2>li:before{content:"\0025a0  "}ul.lst-kix_mh7e4mkizsn7-8{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-7{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-6{list-style-type:none}.lst-kix_3e8hkaak24u1-4>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-4,lower-latin) ". "}.lst-kix_fi8kddlj9rbv-4>li:before{content:"\0025cb  "}ul.lst-kix_mh7e4mkizsn7-5{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-4{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-3{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-2{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-1{list-style-type:none}ul.lst-kix_mh7e4mkizsn7-0{list-style-type:none}ul.lst-kix_go27jn1bszn4-7{list-style-type:none}ul.lst-kix_go27jn1bszn4-6{list-style-type:none}ul.lst-kix_go27jn1bszn4-8{list-style-type:none}ul.lst-kix_go27jn1bszn4-3{list-style-type:none}ul.lst-kix_go27jn1bszn4-2{list-style-type:none}ul.lst-kix_go27jn1bszn4-5{list-style-type:none}ul.lst-kix_go27jn1bszn4-4{list-style-type:none}.lst-kix_cm8haizdird2-7>li:before{content:"-  "}ul.lst-kix_d1wgd7jn6u4a-5{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-6{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-7{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-8{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-1{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-2{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-3{list-style-type:none}ul.lst-kix_d1wgd7jn6u4a-4{list-style-type:none}.lst-kix_cm8haizdird2-3>li:before{content:"-  "}.lst-kix_cm8haizdird2-2>li:before{content:"-  "}.lst-kix_cm8haizdird2-6>li:before{content:"-  "}ul.lst-kix_go27jn1bszn4-1{list-style-type:none}ul.lst-kix_go27jn1bszn4-0{list-style-type:none}ul.lst-kix_amyr41murg23-0{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-4{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-3{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-2{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-1{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-8{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-7{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-6{list-style-type:none}ul.lst-kix_zhz9l2jrpurr-5{list-style-type:none}ul.lst-kix_7inyfcyskz6s-7{list-style-type:none}ul.lst-kix_amyr41murg23-4{list-style-type:none}ul.lst-kix_7inyfcyskz6s-8{list-style-type:none}ul.lst-kix_amyr41murg23-3{list-style-type:none}ul.lst-kix_7inyfcyskz6s-5{list-style-type:none}ul.lst-kix_amyr41murg23-2{list-style-type:none}ul.lst-kix_7inyfcyskz6s-6{list-style-type:none}ul.lst-kix_amyr41murg23-1{list-style-type:none}ul.lst-kix_7inyfcyskz6s-3{list-style-type:none}ul.lst-kix_amyr41murg23-8{list-style-type:none}ul.lst-kix_7inyfcyskz6s-4{list-style-type:none}ul.lst-kix_amyr41murg23-7{list-style-type:none}ul.lst-kix_7inyfcyskz6s-1{list-style-type:none}ul.lst-kix_amyr41murg23-6{list-style-type:none}ul.lst-kix_7inyfcyskz6s-2{list-style-type:none}ul.lst-kix_amyr41murg23-5{list-style-type:none}ol.lst-kix_3e8hkaak24u1-8.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-8 0}ul.lst-kix_cm8haizdird2-7{list-style-type:none}ul.lst-kix_cm8haizdird2-6{list-style-type:none}ul.lst-kix_cm8haizdird2-8{list-style-type:none}ul.lst-kix_cm8haizdird2-1{list-style-type:none}ul.lst-kix_cm8haizdird2-0{list-style-type:none}ul.lst-kix_cm8haizdird2-3{list-style-type:none}ul.lst-kix_cm8haizdird2-2{list-style-type:none}ul.lst-kix_cm8haizdird2-5{list-style-type:none}ul.lst-kix_cm8haizdird2-4{list-style-type:none}.lst-kix_3e8hkaak24u1-3>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-3}ol.lst-kix_3e8hkaak24u1-7.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-7 0}.lst-kix_2llezu98mfz9-8>li:before{content:"\0025a0  "}.lst-kix_12ugnkenvcz0-7>li:before{content:"+  "}.lst-kix_2llezu98mfz9-7>li:before{content:"\0025cb  "}.lst-kix_12ugnkenvcz0-8>li:before{content:"+  "}.lst-kix_2llezu98mfz9-4>li:before{content:"\0025cb  "}.lst-kix_12ugnkenvcz0-3>li:before{content:"+  "}.lst-kix_2llezu98mfz9-0>li:before{content:"\0025cf  "}.lst-kix_2llezu98mfz9-3>li:before{content:"\0025cf  "}.lst-kix_12ugnkenvcz0-4>li:before{content:"+  "}ul.lst-kix_zhz9l2jrpurr-0{list-style-type:none}.lst-kix_6yo0xjp73nx7-3>li:before{content:"-  "}.lst-kix_vmgrc4z9xzgi-8>li:before{content:"\0025a0  "}.lst-kix_xk57rvssn6lu-2>li:before{content:"+  "}.lst-kix_wxewwta1hpt8-5>li:before{content:"\0025a0  "}.lst-kix_12ugnkenvcz0-0>li:before{content:"+  "}.lst-kix_6yo0xjp73nx7-7>li:before{content:"-  "}.lst-kix_ze4pl2ewl5ws-8>li:before{content:"\0025a0  "}.lst-kix_6t9zzhcnhw0j-8>li:before{content:"\0025a0  "}.lst-kix_ze4pl2ewl5ws-4>li:before{content:"\0025cb  "}.lst-kix_vmgrc4z9xzgi-0>li:before{content:"\0025cf  "}.lst-kix_6t9zzhcnhw0j-4>li:before{content:"\0025cb  "}.lst-kix_zhz9l2jrpurr-7>li:before{content:"+  "}.lst-kix_vmgrc4z9xzgi-4>li:before{content:"\0025cb  "}ul.lst-kix_6t9zzhcnhw0j-8{list-style-type:none}.lst-kix_kemroksgnj5h-8>li:before{content:"-  "}.lst-kix_wxewwta1hpt8-1>li:before{content:"\0025cb  "}ul.lst-kix_6t9zzhcnhw0j-5{list-style-type:none}ul.lst-kix_6t9zzhcnhw0j-4{list-style-type:none}ul.lst-kix_6t9zzhcnhw0j-7{list-style-type:none}.lst-kix_ze4pl2ewl5ws-0>li:before{content:"\0025cf  "}ul.lst-kix_6t9zzhcnhw0j-6{list-style-type:none}ul.lst-kix_6t9zzhcnhw0j-1{list-style-type:none}.lst-kix_6t9zzhcnhw0j-0>li:before{content:"\0025cf  "}ul.lst-kix_6t9zzhcnhw0j-0{list-style-type:none}ul.lst-kix_6t9zzhcnhw0j-3{list-style-type:none}.lst-kix_zhz9l2jrpurr-3>li:before{content:"+  "}ul.lst-kix_6t9zzhcnhw0j-2{list-style-type:none}.lst-kix_a9brwreve9ax-1>li:before{content:"\0025cb  "}ul.lst-kix_8lttz4569w3b-7{list-style-type:none}ul.lst-kix_8lttz4569w3b-8{list-style-type:none}.lst-kix_a9brwreve9ax-5>li:before{content:"\0025a0  "}ul.lst-kix_8lttz4569w3b-5{list-style-type:none}ul.lst-kix_8lttz4569w3b-6{list-style-type:none}ul.lst-kix_4yi9ah5123x9-7{list-style-type:none}ul.lst-kix_4yi9ah5123x9-8{list-style-type:none}.lst-kix_7zgpqb8b5pic-5>li:before{content:"\0025a0  "}.lst-kix_ut4h596m3lcb-8>li:before{content:"-  "}.lst-kix_b7mv6vvstec2-2>li:before{content:"+  "}.lst-kix_7zgpqb8b5pic-1>li:before{content:"\0025cb  "}.lst-kix_ut4h596m3lcb-4>li:before{content:"-  "}.lst-kix_v5mwjiklz8gv-2>li:before{content:"\0025a0  "}.lst-kix_2xj1mqw8bfhm-3>li:before{content:"-  "}.lst-kix_2xj1mqw8bfhm-7>li:before{content:"-  "}.lst-kix_3e8hkaak24u1-5>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-5,lower-roman) ". "}.lst-kix_siqrcxh2flzf-5>li:before{content:"+  "}ul.lst-kix_4yi9ah5123x9-3{list-style-type:none}ul.lst-kix_4yi9ah5123x9-4{list-style-type:none}ul.lst-kix_8lttz4569w3b-0{list-style-type:none}.lst-kix_fi8kddlj9rbv-1>li:before{content:"\0025cb  "}ul.lst-kix_4yi9ah5123x9-5{list-style-type:none}ul.lst-kix_4yi9ah5123x9-6{list-style-type:none}ul.lst-kix_8lttz4569w3b-3{list-style-type:none}.lst-kix_3e8hkaak24u1-1>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-1,lower-latin) ". "}ul.lst-kix_4yi9ah5123x9-0{list-style-type:none}.lst-kix_b7mv6vvstec2-6>li:before{content:"+  "}ul.lst-kix_8lttz4569w3b-4{list-style-type:none}ul.lst-kix_4yi9ah5123x9-1{list-style-type:none}ul.lst-kix_8lttz4569w3b-1{list-style-type:none}ul.lst-kix_4yi9ah5123x9-2{list-style-type:none}ul.lst-kix_8lttz4569w3b-2{list-style-type:none}.lst-kix_siqrcxh2flzf-1>li:before{content:"+  "}.lst-kix_fi8kddlj9rbv-5>li:before{content:"\0025a0  "}.lst-kix_v5mwjiklz8gv-6>li:before{content:"\0025cf  "}.lst-kix_4sa2tkz4jseq-4>li:before{content:"\0025cb  "}.lst-kix_4sa2tkz4jseq-6>li:before{content:"\0025cf  "}.lst-kix_4sa2tkz4jseq-3>li:before{content:"\0025cf  "}.lst-kix_3e8hkaak24u1-2>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-2}ul.lst-kix_xk57rvssn6lu-7{list-style-type:none}ul.lst-kix_xk57rvssn6lu-8{list-style-type:none}ul.lst-kix_xk57rvssn6lu-0{list-style-type:none}ul.lst-kix_xk57rvssn6lu-1{list-style-type:none}ul.lst-kix_xk57rvssn6lu-2{list-style-type:none}ul.lst-kix_xk57rvssn6lu-3{list-style-type:none}ul.lst-kix_xk57rvssn6lu-4{list-style-type:none}ul.lst-kix_xk57rvssn6lu-5{list-style-type:none}ul.lst-kix_xk57rvssn6lu-6{list-style-type:none}.lst-kix_96kta2oflxbn-3>li:before{content:"\0025cf  "}.lst-kix_96kta2oflxbn-1>li:before{content:"\0025cb  "}ul.lst-kix_12ugnkenvcz0-8{list-style-type:none}ul.lst-kix_12ugnkenvcz0-7{list-style-type:none}ul.lst-kix_12ugnkenvcz0-6{list-style-type:none}ul.lst-kix_12ugnkenvcz0-5{list-style-type:none}ul.lst-kix_gbtnpw2azggi-7{list-style-type:none}ul.lst-kix_gbtnpw2azggi-8{list-style-type:none}.lst-kix_3e8hkaak24u1-6>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-6}ul.lst-kix_12ugnkenvcz0-0{list-style-type:none}ul.lst-kix_12ugnkenvcz0-4{list-style-type:none}ul.lst-kix_12ugnkenvcz0-3{list-style-type:none}ul.lst-kix_12ugnkenvcz0-2{list-style-type:none}ul.lst-kix_12ugnkenvcz0-1{list-style-type:none}.lst-kix_96kta2oflxbn-6>li:before{content:"\0025cf  "}.lst-kix_4sa2tkz4jseq-1>li:before{content:"\0025cb  "}.lst-kix_96kta2oflxbn-4>li:before{content:"\0025cb  "}.lst-kix_6yo0xjp73nx7-2>li:before{content:"-  "}ul.lst-kix_siqrcxh2flzf-0{list-style-type:none}.lst-kix_gbtnpw2azggi-4>li:before{content:"\0025cb  "}.lst-kix_6yo0xjp73nx7-0>li:before{content:"-  "}.lst-kix_gbtnpw2azggi-2>li:before{content:"\0025a0  "}ul.lst-kix_siqrcxh2flzf-7{list-style-type:none}.lst-kix_7ovu51st6e9x-6>li:before{content:"\0025cf  "}ul.lst-kix_siqrcxh2flzf-8{list-style-type:none}ul.lst-kix_vuwoxliz439h-0{list-style-type:none}ul.lst-kix_siqrcxh2flzf-5{list-style-type:none}ul.lst-kix_vuwoxliz439h-1{list-style-type:none}ul.lst-kix_siqrcxh2flzf-6{list-style-type:none}ul.lst-kix_vuwoxliz439h-2{list-style-type:none}ul.lst-kix_siqrcxh2flzf-3{list-style-type:none}ul.lst-kix_vuwoxliz439h-3{list-style-type:none}ul.lst-kix_siqrcxh2flzf-4{list-style-type:none}ul.lst-kix_vuwoxliz439h-4{list-style-type:none}ul.lst-kix_siqrcxh2flzf-1{list-style-type:none}ul.lst-kix_vuwoxliz439h-5{list-style-type:none}ul.lst-kix_siqrcxh2flzf-2{list-style-type:none}ul.lst-kix_vuwoxliz439h-6{list-style-type:none}.lst-kix_amyr41murg23-6>li:before{content:"+  "}ul.lst-kix_vuwoxliz439h-7{list-style-type:none}ul.lst-kix_vuwoxliz439h-8{list-style-type:none}.lst-kix_amyr41murg23-8>li:before{content:"+  "}.lst-kix_6yo0xjp73nx7-8>li:before{content:"-  "}.lst-kix_6t9zzhcnhw0j-7>li:before{content:"\0025cb  "}.lst-kix_7ovu51st6e9x-4>li:before{content:"\0025cb  "}ol.lst-kix_3e8hkaak24u1-6.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-6 0}ul.lst-kix_gbtnpw2azggi-3{list-style-type:none}.lst-kix_ze4pl2ewl5ws-3>li:before{content:"\0025cf  "}ul.lst-kix_gbtnpw2azggi-4{list-style-type:none}ul.lst-kix_gbtnpw2azggi-5{list-style-type:none}ul.lst-kix_gbtnpw2azggi-6{list-style-type:none}.lst-kix_ze4pl2ewl5ws-1>li:before{content:"\0025cb  "}ul.lst-kix_gbtnpw2azggi-0{list-style-type:none}ul.lst-kix_gbtnpw2azggi-1{list-style-type:none}ul.lst-kix_gbtnpw2azggi-2{list-style-type:none}.lst-kix_6t9zzhcnhw0j-5>li:before{content:"\0025a0  "}ul.lst-kix_7inyfcyskz6s-0{list-style-type:none}.lst-kix_7zgpqb8b5pic-6>li:before{content:"\0025cf  "}.lst-kix_7zgpqb8b5pic-8>li:before{content:"\0025a0  "}.lst-kix_7zgpqb8b5pic-0>li:before{content:"\0025cf  "}.lst-kix_a9brwreve9ax-2>li:before{content:"\0025a0  "}.lst-kix_yq56unpfmf0s-5>li:before{content:"\0025a0  "}.lst-kix_a9brwreve9ax-4>li:before{content:"\0025cb  "}.lst-kix_imn8r2awgiqm-3>li:before{content:"-  "}.lst-kix_wyjway4ccmes-3>li:before{content:"+  "}.lst-kix_3e8hkaak24u1-5>li{counter-increment:lst-ctn-kix_3e8hkaak24u1-5}.lst-kix_yq56unpfmf0s-3>li:before{content:"\0025cf  "}ol.lst-kix_3e8hkaak24u1-4.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-4 0}.lst-kix_wyjway4ccmes-5>li:before{content:"+  "}.lst-kix_amyr41murg23-0>li:before{content:"+  "}.lst-kix_v5mwjiklz8gv-1>li:before{content:"\0025cb  "}.lst-kix_imn8r2awgiqm-5>li:before{content:"-  "}ul.lst-kix_vmgrc4z9xzgi-2{list-style-type:none}ul.lst-kix_vmgrc4z9xzgi-1{list-style-type:none}.lst-kix_siqrcxh2flzf-4>li:before{content:"+  "}ul.lst-kix_vmgrc4z9xzgi-0{list-style-type:none}.lst-kix_v5mwjiklz8gv-7>li:before{content:"\0025cb  "}ul.lst-kix_vmgrc4z9xzgi-6{list-style-type:none}ul.lst-kix_vmgrc4z9xzgi-5{list-style-type:none}ul.lst-kix_vmgrc4z9xzgi-4{list-style-type:none}ul.lst-kix_vmgrc4z9xzgi-3{list-style-type:none}.lst-kix_siqrcxh2flzf-2>li:before{content:"+  "}ul.lst-kix_vmgrc4z9xzgi-8{list-style-type:none}ul.lst-kix_vmgrc4z9xzgi-7{list-style-type:none}ul.lst-kix_96kta2oflxbn-5{list-style-type:none}ul.lst-kix_96kta2oflxbn-6{list-style-type:none}ul.lst-kix_96kta2oflxbn-3{list-style-type:none}.lst-kix_tbf4cq2mnbzk-2>li:before{content:"\0025a0  "}ul.lst-kix_96kta2oflxbn-4{list-style-type:none}ul.lst-kix_96kta2oflxbn-7{list-style-type:none}ul.lst-kix_96kta2oflxbn-8{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-6{list-style-type:none}ul.lst-kix_96kta2oflxbn-1{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-5{list-style-type:none}ul.lst-kix_96kta2oflxbn-2{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-8{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-7{list-style-type:none}ul.lst-kix_96kta2oflxbn-0{list-style-type:none}.lst-kix_r0dvroh27d45-8>li:before{content:"\0025a0  "}.lst-kix_cm8haizdird2-1>li:before{content:"-  "}.lst-kix_cm8haizdird2-4>li:before{content:"-  "}.lst-kix_pe9j1dva1e2f-6>li:before{content:"\0025cf  "}ul.lst-kix_7zgpqb8b5pic-2{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-1{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-4{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-3{list-style-type:none}ul.lst-kix_7zgpqb8b5pic-0{list-style-type:none}ol.lst-kix_3e8hkaak24u1-2.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-2 0}ol.lst-kix_3e8hkaak24u1-1.start{counter-reset:lst-ctn-kix_3e8hkaak24u1-1 0}.lst-kix_8bt0fje9mgmq-2>li:before{content:"-  "}.lst-kix_ybqxjefziic9-2>li:before{content:"\0025a0  "}ul.lst-kix_pe9j1dva1e2f-5{list-style-type:none}ul.lst-kix_pe9j1dva1e2f-6{list-style-type:none}.lst-kix_r0dvroh27d45-3>li:before{content:"\0025cf  "}ul.lst-kix_pe9j1dva1e2f-7{list-style-type:none}ul.lst-kix_pe9j1dva1e2f-8{list-style-type:none}.lst-kix_r0dvroh27d45-0>li:before{content:"\0025cf  "}.lst-kix_mh7e4mkizsn7-6>li:before{content:"-  "}.lst-kix_2llezu98mfz9-5>li:before{content:"\0025a0  "}.lst-kix_ybqxjefziic9-7>li:before{content:"\0025cb  "}.lst-kix_12ugnkenvcz0-2>li:before{content:"+  "}.lst-kix_t98xjwd1smqf-1>li:before{content:"+  "}.lst-kix_tbf4cq2mnbzk-5>li:before{content:"\0025a0  "}.lst-kix_8bt0fje9mgmq-5>li:before{content:"-  "}.lst-kix_mh7e4mkizsn7-3>li:before{content:"-  "}.lst-kix_12ugnkenvcz0-5>li:before{content:"+  "}ul.lst-kix_pe9j1dva1e2f-0{list-style-type:none}ul.lst-kix_pe9j1dva1e2f-1{list-style-type:none}.lst-kix_2llezu98mfz9-2>li:before{content:"\0025a0  "}ul.lst-kix_pe9j1dva1e2f-2{list-style-type:none}ul.lst-kix_pe9j1dva1e2f-3{list-style-type:none}ul.lst-kix_pe9j1dva1e2f-4{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-7{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-8{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-5{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-6{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-3{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-4{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-1{list-style-type:none}ul.lst-kix_4sa2tkz4jseq-2{list-style-type:none}.lst-kix_gbtnpw2azggi-7>li:before{content:"\0025cb  "}ul.lst-kix_4sa2tkz4jseq-0{list-style-type:none}.lst-kix_vmgrc4z9xzgi-6>li:before{content:"\0025cf  "}.lst-kix_xk57rvssn6lu-4>li:before{content:"+  "}ul.lst-kix_ut4h596m3lcb-5{list-style-type:none}.lst-kix_7ovu51st6e9x-1>li:before{content:"\0025cb  "}ul.lst-kix_ut4h596m3lcb-6{list-style-type:none}ul.lst-kix_ut4h596m3lcb-3{list-style-type:none}ul.lst-kix_ut4h596m3lcb-4{list-style-type:none}ul.lst-kix_ut4h596m3lcb-7{list-style-type:none}ul.lst-kix_ut4h596m3lcb-8{list-style-type:none}.lst-kix_ze4pl2ewl5ws-6>li:before{content:"\0025cf  "}ul.lst-kix_ut4h596m3lcb-1{list-style-type:none}.lst-kix_6yo0xjp73nx7-5>li:before{content:"-  "}ul.lst-kix_ut4h596m3lcb-2{list-style-type:none}.lst-kix_wxewwta1hpt8-7>li:before{content:"\0025cb  "}ul.lst-kix_ut4h596m3lcb-0{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-4{list-style-type:none}.lst-kix_6t9zzhcnhw0j-2>li:before{content:"\0025a0  "}ul.lst-kix_5pyw9e9a75ls-3{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-6{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-5{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-0{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-2{list-style-type:none}.lst-kix_zhz9l2jrpurr-5>li:before{content:"+  "}ul.lst-kix_5pyw9e9a75ls-1{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-8{list-style-type:none}ul.lst-kix_5pyw9e9a75ls-7{list-style-type:none}.lst-kix_a9brwreve9ax-7>li:before{content:"\0025cb  "}.lst-kix_mgacuusuhumg-3>li:before{content:"\0025cf  "}.lst-kix_imn8r2awgiqm-0>li:before{content:"-  "}.lst-kix_4yi9ah5123x9-2>li:before{content:"\0025a0  "}.lst-kix_b7mv6vvstec2-4>li:before{content:"+  "}.lst-kix_7zgpqb8b5pic-3>li:before{content:"\0025cf  "}.lst-kix_ut4h596m3lcb-6>li:before{content:"-  "}.lst-kix_pe9j1dva1e2f-3>li:before{content:"\0025cf  "}.lst-kix_yq56unpfmf0s-0>li:before{content:"\0025cf  "}.lst-kix_5pyw9e9a75ls-0>li:before{content:"+  "}.lst-kix_wyjway4ccmes-8>li:before{content:"+  "}.lst-kix_2xj1mqw8bfhm-5>li:before{content:"-  "}.lst-kix_vuwoxliz439h-2>li:before{content:"-  "}.lst-kix_siqrcxh2flzf-7>li:before{content:"+  "}.lst-kix_amyr41murg23-3>li:before{content:"+  "}ul.lst-kix_mgacuusuhumg-7{list-style-type:none}ul.lst-kix_mgacuusuhumg-6{list-style-type:none}ul.lst-kix_mgacuusuhumg-5{list-style-type:none}ul.lst-kix_mgacuusuhumg-4{list-style-type:none}.lst-kix_imn8r2awgiqm-8>li:before{content:"-  "}ul.lst-kix_mgacuusuhumg-8{list-style-type:none}.lst-kix_3e8hkaak24u1-3>li:before{content:"" counter(lst-ctn-kix_3e8hkaak24u1-3,decimal) ". "}.lst-kix_yq56unpfmf0s-8>li:before{content:"\0025a0  "}.lst-kix_v5mwjiklz8gv-4>li:before{content:"\0025cb  "}ul.lst-kix_mgacuusuhumg-3{list-style-type:none}ul.lst-kix_mgacuusuhumg-2{list-style-type:none}.lst-kix_fi8kddlj9rbv-3>li:before{content:"\0025cf  "}ul.lst-kix_mgacuusuhumg-1{list-style-type:none}.lst-kix_wyjway4ccmes-0>li:before{content:"+  "}ul.lst-kix_mgacuusuhumg-0{list-style-type:none}ol{margin:0;padding:0}table td,table th{padding:0}.c33{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#f3f3f3;border-left-style:solid;border-bottom-width:1pt;width:62.2pt;border-top-color:#000000;border-bottom-style:solid}.c35{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#b6d7a8;border-left-style:solid;border-bottom-width:1pt;width:353.2pt;border-top-color:#000000;border-bottom-style:solid}.c22{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#999999;border-left-style:solid;border-bottom-width:1pt;width:51.8pt;border-top-color:#000000;border-bottom-style:solid}.c29{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#999999;border-left-style:solid;border-bottom-width:1pt;width:352.5pt;border-top-color:#000000;border-bottom-style:solid}.c16{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#b6d7a8;border-left-style:solid;border-bottom-width:1pt;width:352.5pt;border-top-color:#000000;border-bottom-style:solid}.c46{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#999999;border-left-style:solid;border-bottom-width:1pt;width:62.2pt;border-top-color:#000000;border-bottom-style:solid}.c34{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#b6d7a8;border-left-style:solid;border-bottom-width:1pt;width:63pt;border-top-color:#000000;border-bottom-style:solid}.c15{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#f3f3f3;border-left-style:solid;border-bottom-width:1pt;width:63pt;border-top-color:#000000;border-bottom-style:solid}.c60{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#f3f3f3;border-left-style:solid;border-bottom-width:1pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}.c44{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:353.2pt;border-top-color:#000000;border-bottom-style:solid}.c59{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:62.2pt;border-top-color:#000000;border-bottom-style:solid}.c38{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:352.5pt;border-top-color:#000000;border-bottom-style:solid}.c24{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#808080;border-top-width:0pt;border-right-width:0pt;border-left-color:#808080;vertical-align:top;border-right-color:#808080;border-left-width:0pt;border-top-style:solid;border-left-style:solid;border-bottom-width:0pt;width:226.5pt;border-top-color:#808080;border-bottom-style:solid}.c50{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:63pt;border-top-color:#000000;border-bottom-style:solid}.c27{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:51.8pt;border-top-color:#000000;border-bottom-style:solid}.c43{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#808080;border-top-width:0pt;border-right-width:0pt;border-left-color:#808080;vertical-align:top;border-right-color:#808080;border-left-width:0pt;border-top-style:solid;border-left-style:solid;border-bottom-width:0pt;width:12pt;border-top-color:#808080;border-bottom-style:solid}.c53{-webkit-text-decoration-skip:none;color:#000000;font-weight:400;text-decoration:underline;vertical-align:baseline;text-decoration-skip-ink:none;font-family:"Arial";font-style:normal}.c2{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c11{color:#434343;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal}.c18{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c26{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c8{padding-top:16pt;padding-bottom:4pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c41{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:italic}.c6{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c32{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:12pt;font-family:"Arial";font-style:normal}.c37{color:#000000;text-decoration:none;vertical-align:baseline;font-size:26pt;font-family:"Arial";font-style:normal}.c4{color:#000000;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c14{color:#000000;text-decoration:none;vertical-align:baseline;font-size:9pt;font-family:"Arial";font-style:normal}.c0{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c42{color:#1155cc;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c56{padding-top:0pt;padding-bottom:3pt;line-height:1.15;page-break-after:avoid;text-align:left}.c28{margin-left:18pt;padding-top:3pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c47{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;text-align:left}.c30{padding-top:0pt;padding-bottom:0pt;line-height:1.15;text-align:left}.c51{padding-top:4pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c12{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c36{padding-top:10pt;padding-bottom:4pt;line-height:1.0;text-align:left}.c13{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c39{border-spacing:0;border-collapse:collapse;margin-right:auto}.c7{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:center}.c31{padding-top:10pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c58{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c9{margin-left:36pt;padding-left:0pt}.c19{color:inherit;text-decoration:inherit}.c21{orphans:2;widows:2}.c10{margin-left:72pt;padding-left:0pt}.c3{padding:0;margin:0}.c23{margin-left:108pt;padding-left:0pt}.c1{font-weight:700}.c25{height:0pt}.c20{font-size:9pt}.c45{height:24pt}.c40{background-color:#b6d7a8}.c54{height:26pt}.c49{background-color:#999999}.c57{color:#1155cc}.c5{height:11pt}.c48{font-size:15pt}.c55{font-size:12pt}.c17{height:21pt}.c52{margin-left:72pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c58"><p class="c21 c56 title" id="h.odc700in1ypg"><span class="c1 c37">WebPerf WG @ TPAC 2019</span></p><p class="c0"><span class="c13 c48"><a class="c19" href="https://www.google.com/url?q=https://bit.ly/webperf-tpac19&amp;sa=D&amp;source=editors&amp;ust=1613252067821000&amp;usg=AOvVaw2urLWwACF5XvvneUKW7SGI">bit.ly/webperf-tpac19</a></span></p><p class="c0 c5"><span class="c2"></span></p><a id="t.a4d217188b2272cacee06964bfd17e9ebfd3d6e8"></a><a id="t.0"></a><table class="c39"><tbody><tr class="c25"><td class="c60" colspan="1" rowspan="1"><p class="c12 c5"><span class="c2"></span></p><p class="c21 c51"><span class="c4 c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.wlg3h8rzf61l">Logistics</a></span><span class="c4 c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="c4 c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.wlg3h8rzf61l">1</a></span></p><p class="c28 c21"><span class="c2"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.dblx6emzzv04">Location &amp; participation</a></span><span class="c2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="c2"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.dblx6emzzv04">1</a></span></p><p class="c28 c21"><span><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.x2o0mg51zqnv">Attendees</a></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.x2o0mg51zqnv">1</a></span></p><p class="c21 c31"><span class="c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.lnthn2y6jgo8">Agenda scratchpad</a></span><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.lnthn2y6jgo8">1</a></span></p><p class="c31 c21"><span class="c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.tx59951gswac">Agenda</a></span><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.tx59951gswac">2</a></span></p><p class="c28 c21"><span><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.k0zzrh9ez9fv">Monday</a></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.k0zzrh9ez9fv">2</a></span></p><p class="c21 c28"><span><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.e2nehhjf0s82">Tuesday</a></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.e2nehhjf0s82">2</a></span></p><p class="c21 c36"><span class="c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.ym9i2k8eaxr5">Minutes</a></span><span class="c1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="c1"><a class="c19" href="https://docs.google.com/document/d/e/2PACX-1vS92Ss2os8bGUf4udpici_LmehHPqmSmFlZAAW5d7YNILaxxzaG4IEkA6h8R6wy9SnE4yMfr7HUPGl5/pub#h.ym9i2k8eaxr5">2</a></span></p><p class="c12 c5"><span class="c2"></span></p></td></tr></tbody></table><p class="c0 c5"><span class="c2"></span></p><h1 class="c47 c21" id="h.wlg3h8rzf61l"><span class="c1 c42">Logistics</span></h1><h2 class="c6" id="h.dblx6emzzv04"><span class="c18">Location &amp; participation</span></h2><a id="t.56f7e2d6bdd65e8574fc941933d55111dcbae30a"></a><a id="t.1"></a><table class="c39"><tbody><tr class="c45"><td class="c43" colspan="1" rowspan="1"><p class="c5 c30"><span class="c2"></span></p></td><td class="c24" colspan="1" rowspan="1"><p class="c30"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://www.w3.org/2019/09/TPAC/venue.html&amp;sa=D&amp;source=editors&amp;ust=1613252067830000&amp;usg=AOvVaw3xukGde_55L3UzYViN2wkU">Hilton Fukuoka</a></span><span>, </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://www3.hilton.com/resources/media/hi/FUKHIHI/en_US/pdf/FUKHI.Floorplans.May18.pdf&amp;sa=D&amp;source=editors&amp;ust=1613252067830000&amp;usg=AOvVaw02QZeeFNuOiFDgptArkRgs">Sakura, 3F</a></span></p><p class="c30"><span class="c1">Remote participation/presentation </span><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://meet.google.com/goa-cdnb-joi&amp;sa=D&amp;source=editors&amp;ust=1613252067831000&amp;usg=AOvVaw0ALt69WxL2GUuLJU8bqMcA">link</a></span></p></td></tr></tbody></table><h2 class="c6" id="h.x2o0mg51zqnv"><span class="c18">Attendees (On location)</span></h2><p class="c0"><span class="c13 c55"><a class="c19" href="https://www.google.com/url?q=https://www.w3.org/register/tpac2019/registrants%23meeting-78&amp;sa=D&amp;source=editors&amp;ust=1613252067832000&amp;usg=AOvVaw24p2JK-TbUbuWnoMm2G-c5">Attendance for the Web Performance WG meeting</a></span></p><p class="c0 c5"><span class="c2"></span></p><ul class="c3 lst-kix_4sa2tkz4jseq-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Yoav Weiss - Google (all days)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Ilya Grigorik - Google (all days)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Todd Reifsteck - Microsoft</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Nic Jansma - Akamai (all days)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Nicolás Peña - Google</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Ryosuke Niwa - Apple (Monday only)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Alex Christensen - Apple</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Steven Bougon (All days)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Philip Walton - Google</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Will Hawkins - Mozilla (all days)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Nathan Schloss - Facebook (Tuesday only)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Andrew Comminos - Facebook</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Vivek Sekhar - Google</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Ian Clelland - Google</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Tim Dresser - Google (all days)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Xiaoqian Wu - W3C</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Markus Stange - Mozilla (all days, but partially (CSS))</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Matt Falkenhagen - Google (late Tuesday)</span></li></ul><h2 class="c6" id="h.z1ds224mu115"><span class="c18">Remote</span></h2><ul class="c3 lst-kix_ybqxjefziic9-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Thomas Kelly - Shopify</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Jason Chase - Google (Monday morning)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Gilles Dubuc - Wikimedia Foundation</span></li></ul><h1 class="c21 c47" id="h.tx59951gswac"><span class="c42 c1">Agenda</span></h1><h2 class="c6" id="h.k0zzrh9ez9fv"><span class="c18">Monday (Design)</span></h2><p class="c0 c5"><span class="c41"></span></p><a id="t.ba1fbf8ec8086d6841f4aa790ab36d00de7af908"></a><a id="t.2"></a><table class="c39"><tbody><tr class="c25"><td class="c49 c50" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">Timeslot</span></p></td><td class="c29" colspan="1" rowspan="1"><p class="c12"><span class="c2">Subject</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c2">POC</span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><p class="c7"><span class="c1 c20">0</span><a id="id.fm1etxwda8nj"></a><span class="c14 c1">8:30~09:15 </span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c12"><span class="c4 c1">Intros &amp; agenda review, meeting goals</span></p><ul class="c3 lst-kix_amyr41murg23-0 start"><li class="c9 c12 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1wztosOJdqhZFaIlCt1uphfEogVlIBLkcLeM5YqdyFOU/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067841000&amp;usg=AOvVaw2lWXTA1VjZ81agMEg7B9qF">Overview of 2019 &amp; roadmap for 2020</a></span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c12"><span class="c2">Yoav, Ilya, Todd</span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><p class="c7"><span class="c1 c20">0</span><a id="id.rp35ikt0l5t6"></a><span class="c14 c1">9:15-09:45</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c1">EventTiming </span><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/12DfSHMwchzjo_H-C4IiZ3WpQ9EB4zRvFpPswMePcqOo/edit?ts%3D5d6e8b31%23slide%3Did.p&amp;sa=D&amp;source=editors&amp;ust=1613252067843000&amp;usg=AOvVaw3KeY3uXkqrp7u68cbTcU53">measureUntil</a></span><span class="c1">&nbsp;(async duration)</span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Nicolás</span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><p class="c7"><span class="c1 c20">0</span><a id="id.nj7gjr9co37f"></a><span class="c14 c1">9:45-10:15</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1tsVlxh5ukruj3BhzfuIM2yw4WmjoUo5BQEWAEs3zSVo/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067845000&amp;usg=AOvVaw1-CgDZjuilRWEHR-_mv_nu">isInputPending</a></span><span class="c1">&nbsp;</span></p><ul class="c3 lst-kix_go27jn1bszn4-0 start"><li class="c0 c9 li-bullet-0"><span class="c2"><b>Nate</b>: spec+implementation update; group status</span></li><li class="c0 c9 li-bullet-0"><span><b>Nic</b>: adoption experience &amp; lessons learned</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Nate, Nicolás, Andrew</span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><a id="kix.2hg9cb6qb0xd"></a><p class="c7"><span class="c1 c20">10:15~1</span></p><p class="c7"><span class="c14 c1">0:45</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/12FMY5WMpyhkC7S9TmB8MluABITxlY-7yo_5AlIfjacg/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067849000&amp;usg=AOvVaw2t4bMcSy4HrmSHQlCewvsc">Reporting API &amp; Network Error Logging</a></span></p><p class="c0"><span>Review feedback &amp; proposed plan</span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Ian, Jason</span></p></td></tr><tr class="c25"><td class="c34" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">10:45~11:00</span></p></td><td class="c16" colspan="1" rowspan="1"><p class="c0"><span class="c2">Break</span></p></td><td class="c27 c40" colspan="1" rowspan="1"><p class="c0 c5"><span class="c2"></span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><a id="id.96fmxj0dq2"></a><p class="c7"><span class="c14 c1">11:00~12:30</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1jEGiLCQMnxLRL5r_ss4R0xBjf8QdGRkjTGrAfbZPASc/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067853000&amp;usg=AOvVaw3rLU6Ql273FzEGeeJ6AsdB">Next steps on </a></span><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1jEGiLCQMnxLRL5r_ss4R0xBjf8QdGRkjTGrAfbZPASc/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067854000&amp;usg=AOvVaw1vGzoZ6s8op0Puvz9RQKJX">SPA monitoring</a></span><span class="c4 c1">&nbsp;</span></p><ul class="c3 lst-kix_d1wgd7jn6u4a-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Review discussion from F2F &amp; Tim’s proposal</span></li><li class="c0 c9 li-bullet-0"><span>Map out 2020 work streams</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Tim, Ilya</span></p></td></tr><tr class="c25"><td class="c34" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">12:30~13:30</span></p></td><td class="c16" colspan="1" rowspan="1"><p class="c0"><span class="c2">Lunch</span></p></td><td class="c27 c40" colspan="1" rowspan="1"><p class="c0 c5"><span class="c2"></span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><a id="id.h1ze7nu94fmo"></a><p class="c7"><span class="c14 c1">13:30-14:30</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1JB4g18nnXCMdCgKweqxLJYh-Xm44ET1SBvmkLi2mRFc/edit&amp;sa=D&amp;source=editors&amp;ust=1613252067858000&amp;usg=AOvVaw1qt3qte58lRVU6ecKXUNqh">CompressStreams</a></span><span>&nbsp;(</span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/ricea/compressstream-explainer&amp;sa=D&amp;source=editors&amp;ust=1613252067858000&amp;usg=AOvVaw1hLfNOgGxKHesKIm7-mjHN">explainer</a></span><span class="c2">)</span></p><ul class="c3 lst-kix_wyjway4ccmes-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Review and discuss current proposal</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Adam, Andrew</span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><a id="id.v3wqk89a1bls"></a><p class="c7"><span class="c14 c1">14:30~15:00</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1UhRwMHB8sy7fw5wMZiFGjBaSGiIbXhAIj415SXtxWeM/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067861000&amp;usg=AOvVaw1FpJH6rPCof7R0nQJNDUdn">JS-self profiling</a></span></p><ul class="c3 lst-kix_t98xjwd1smqf-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Proposal update &amp; implementation status</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Long Tasks and attribution?</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Andrew, Tim</span></p></td></tr><tr class="c54"><td class="c34" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">15:00~15:30</span></p></td><td class="c16" colspan="1" rowspan="1"><p class="c0"><span class="c2">Break</span></p></td><td class="c27 c40" colspan="1" rowspan="1"><p class="c0 c5"><span class="c2"></span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><a id="id.8vubx6jymrhb"></a><p class="c7"><span class="c14 c1">15:30~16:30</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/10jAXSTe71s7v-O2H6Vv69SyoFTGJKEesXCXqAuQA5Ps/edit&amp;sa=D&amp;source=editors&amp;ust=1613252067866000&amp;usg=AOvVaw0XSnS_P5pXlmMAQX3fXFZV">Frame Timing</a></span></p><ul class="c3 lst-kix_vuwoxliz439h-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Noam, Amiya (Eric/Todd may need to represent?), Nicolás</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Noam will dial in from Israel (schedule late)</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Nicolás, Noam</span></p></td></tr><tr class="c25"><td class="c15" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">16:30-18:00</span></p></td><td class="c38" colspan="1" rowspan="1"><p class="c0"><span>LCP implementation experience</span></p></td><td class="c27" colspan="1" rowspan="1"><p class="c0 c5"><span class="c2"></span></p></td></tr></tbody></table><p class="c0 c5 c52"><span class="c2"></span></p><h2 class="c6" id="h.e2nehhjf0s82"><span class="c18">Tuesday (Issue &amp; Hack-day)</span></h2><p class="c0 c5"><span class="c41"></span></p><a id="t.fc338d61d1d9f9cdc7d447c5f40cfe7c023eb473"></a><a id="t.3"></a><table class="c39"><tbody><tr class="c25"><td class="c46" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">Timeslot</span></p></td><td class="c44 c49" colspan="1" rowspan="1"><p class="c12"><span class="c2">Subject</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c2">POC</span></p></td></tr><tr class="c25"><td class="c33" colspan="1" rowspan="1"><p class="c7"><span class="c1 c20">0</span><a id="id.225rlly8iepp"></a><span class="c14 c1">9:00~10:45</span></p></td><td class="c44" colspan="1" rowspan="1"><p class="c12"><span class="c4 c1">Design discussion continued</span></p><p class="c12"><span class="c41">Reserving for followup from Day 1, plus other potential topics...</span></p><p class="c12 c5"><span class="c41"></span></p><ul class="c3 lst-kix_zhz9l2jrpurr-0 start"><li class="c0 c9 li-bullet-0"><span>Living Documents</span></li><li class="c0 c9 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/11k2ZU2ndoO-k32eWGzwsr9AUVa9AwteJpqARcKQveuI/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067873000&amp;usg=AOvVaw1zlf5O5LOHuqg9VnRYj0Vu">ResourceTiming Visibility Improvements</a></span></li></ul><ul class="c3 lst-kix_zhz9l2jrpurr-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/210&amp;sa=D&amp;source=editors&amp;ust=1613252067874000&amp;usg=AOvVaw2uBGP6ba3kSvBOIU4i2RaB">Cross-Origin opt-in</a></span><span class="c2">&nbsp;and Bubbles</span></li></ul><ul class="c3 lst-kix_zhz9l2jrpurr-0"><li class="c0 c9 li-bullet-0"><span>isFramePendin</span><span>g (szager)</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c12 c5"><span class="c2"></span></p></td></tr><tr class="c25"><td class="c59 c40" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">10:45~11:00</span></p></td><td class="c35" colspan="1" rowspan="1"><p class="c0"><span class="c2">Break</span></p></td><td class="c27 c40" colspan="1" rowspan="1"><p class="c0 c5"><span class="c2"></span></p></td></tr><tr class="c25"><td class="c33" colspan="1" rowspan="1"><a id="id.ygi4vgvs7hhj"></a><p class="c7"><span class="c14 c1">11:00~12:30</span></p></td><td class="c44" colspan="1" rowspan="1"><p class="c0"><span class="c1">W3C </span><span class="c13 c1"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/spreadsheets/d/1JIB8c7hfyH_wuxkf6bLgovFekHP1LpTtqBTJGEUIK7E/edit%23gid%3D0&amp;sa=D&amp;source=editors&amp;ust=1613252067878000&amp;usg=AOvVaw3ZTjRF4VzCsl91n3bjCPGI">spec status review</a></span><span class="c4 c1">&nbsp;&amp; next steps</span></p><ul class="c3 lst-kix_siqrcxh2flzf-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Review publication status of each spec</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Identify next steps / unblock / move forward</span></li></ul></td><td class="c27" colspan="1" rowspan="1"><p class="c0"><span class="c2">Yoav, Ilya, Todd</span></p></td></tr><tr class="c25"><td class="c40 c59" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">12:30~14:00</span></p></td><td class="c35" colspan="1" rowspan="1"><p class="c0"><span class="c2">Lunch</span></p></td><td class="c27 c40" colspan="1" rowspan="1"><p class="c0 c5"><span class="c2"></span></p></td></tr><tr class="c17"><td class="c33" colspan="1" rowspan="1"><p class="c7"><span class="c1 c14">14:00~15:45</span></p></td><td class="c44" colspan="1" rowspan="4"><p class="c0"><span class="c1"><b>Working session</b>: </span><span class="c1">issue triage</span><span class="c4 c1">&nbsp;&amp; resolution</span></p><p class="c0 c5"><span class="c2"></span></p></td><td class="c27" colspan="1" rowspan="4"><p class="c0 c5"><span class="c2"></span></p></td></tr><tr class="c54"><td class="c33" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">15:45~16:00</span></p></td></tr><tr class="c17"><td class="c33" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">16:00~17:00</span></p></td></tr><tr class="c17"><td class="c33" colspan="1" rowspan="1"><p class="c7"><span class="c14 c1">17:00-18:00</span></p></td></tr></tbody></table><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/spreadsheets/d/1JIB8c7hfyH_wuxkf6bLgovFekHP1LpTtqBTJGEUIK7E/edit%23gid%3D0&amp;sa=D&amp;source=editors&amp;ust=1613252067886000&amp;usg=AOvVaw0nfMnbtqiPwfc9z4Qzx-nQ">Spec spreadsheet</a></span></p><ul class="c3 lst-kix_fi8kddlj9rbv-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Navigation Timing may have 2 issues that require some discussion, </span></li><li class="c0 c9 li-bullet-0"><span class="c2">Otherwise for RT, NT, Page Visibility, rIC is Just Work™</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Preload, Resource Hints, Long Tasks, Device Memory, Reporting and NEL need a lot of love.</span></li></ul><h2 class="c6" id="h.p1bz88ai3gok"><span class="c18">Potential issues to discuss</span></h2><ul class="c3 lst-kix_a9brwreve9ax-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Resource Timing</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/pull/214&amp;sa=D&amp;source=editors&amp;ust=1613252067888000&amp;usg=AOvVaw0Mr1I_82C97z4ueafy2JW1">PR#214 - Align TAO with CORS</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-0"><li class="c0 c9 li-bullet-0"><span class="c2">Navigation Timing</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/114&amp;sa=D&amp;source=editors&amp;ust=1613252067888000&amp;usg=AOvVaw0IQszT9q6_6cHhobuYELvX">#114 - Spec for PerformanceNavigationTiming.type does not match any implementations</a></span><span class="c2">&nbsp;- hopefully only definition change + tests, so no need for discussion</span></li><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/115&amp;sa=D&amp;source=editors&amp;ust=1613252067889000&amp;usg=AOvVaw03m2G4pyWVALkzfkGYgOWS">#115 - Definition of "back_forward" navigation type does not make sense</a></span><span>&nbsp;- discuss desired behavior</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-0"><li class="c0 c9 li-bullet-0"><span>Preload</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/139&amp;sa=D&amp;source=editors&amp;ust=1613252067890000&amp;usg=AOvVaw3351-XD8RNOhDq6_GriDZM">Specifying Range in Link preload header for HTTP/2 Push</a></span></li><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/114&amp;sa=D&amp;source=editors&amp;ust=1613252067890000&amp;usg=AOvVaw0WFh8-R67CyNsjlUtdAqah">103 and CSP</a></span></li><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/66&amp;sa=D&amp;source=editors&amp;ust=1613252067891000&amp;usg=AOvVaw3xHtLdvqzoKRZs6Kch-p1V">Urgency Hints</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-0"><li class="c0 c9 li-bullet-0"><span class="c2">Resource Hints</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/resource-hints/issues/82&amp;sa=D&amp;source=editors&amp;ust=1613252067891000&amp;usg=AOvVaw12zpQuCxB_5av8WyiViIoi">Prefetch and double-key caching</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-0"><li class="c0 c9 li-bullet-0"><span class="c2">Long tasks</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/longtasks/issues/67&amp;sa=D&amp;source=editors&amp;ust=1613252067892000&amp;usg=AOvVaw2gEwJDjbRTi4FAdhlB7ee3">"multiple-contexts" doesn't seem useful</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-0"><li class="c0 c9 li-bullet-0"><span class="c2">Reporting</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/reporting/issues/74&amp;sa=D&amp;source=editors&amp;ust=1613252067892000&amp;usg=AOvVaw008UOm2d2yG6bN78fLyq8i">https://github.com/w3c/reporting/issues/74 Observing reports cross-frame</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-2 start"><li class="c0 c23 li-bullet-0"><span>No clear use-case</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/reporting/issues/126&amp;sa=D&amp;source=editors&amp;ust=1613252067893000&amp;usg=AOvVaw13sQNgM4gDhVFDLfKysDjR">https://github.com/w3c/reporting/issues/126 Observe() should be promise-based</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-2 start"><li class="c0 c23 li-bullet-0"><span>No</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/reporting/issues/131&amp;sa=D&amp;source=editors&amp;ust=1613252067894000&amp;usg=AOvVaw0gmo-DsyqXLXysD1ZFbxuU">https://github.com/w3c/reporting/issues/131 Expose reporting api to workers</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-2 start"><li class="c0 c23 li-bullet-0"><span>We should probably do that for reports that are triggered from workers</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/reporting/issues/132&amp;sa=D&amp;source=editors&amp;ust=1613252067894000&amp;usg=AOvVaw0lbo6uaBoNXJIqsO6ADMLl">https://github.com/w3c/reporting/issues/132 Format of dates</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-2 start"><li class="c0 c23 li-bullet-0"><span>We don’t have any date format we currently use</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/reporting/issues/147&amp;sa=D&amp;source=editors&amp;ust=1613252067895000&amp;usg=AOvVaw3U14FmzR2SG-GT2HzNR_bZ">https://github.com/w3c/reporting/issues/147 Relative URLs in report config</a></span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-2 start"><li class="c0 c23 li-bullet-0"><span>No if we can convince current report-uri users to move</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/reporting/issues/161&amp;sa=D&amp;source=editors&amp;ust=1613252067896000&amp;usg=AOvVaw2UP8Rh1B-YGc8A5d0iuYwA">https://github.com/w3c/reporting/issues/161</a></span><span class="c2">&nbsp;Credential-less reporting</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-2 start"><li class="c0 c23 li-bullet-0"><span>Same-origin can conflict with batching</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-0"><li class="c0 c9 li-bullet-0"><span class="c2">NEL</span></li></ul><ul class="c3 lst-kix_a9brwreve9ax-1 start"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/network-error-logging/issues&amp;sa=D&amp;source=editors&amp;ust=1613252067897000&amp;usg=AOvVaw3GzHMeJDeWEI9qeYFC7RjC">14 open issues</a></span></li></ul><p class="c0 c5"><span class="c2"></span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.3r1udohvqk51"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://www.youtube.com/watch?v%3DAU7TVJ2jO0Y%26list%3DPL5b8e1JT2i4a3PqaF4a6tVfqZela-pSky%26index%3D17&amp;sa=D&amp;source=editors&amp;ust=1613252067897000&amp;usg=AOvVaw3kcFLPkr3qZ-0Jnx99oGC7">Videos</a></span></h2><h1 class="c47 c21" id="h.ym9i2k8eaxr5"><span class="c1 c57">Sessions</span></h1><h2 class="c6" id="h.uy7y8exalhko"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/12DfSHMwchzjo_H-C4IiZ3WpQ9EB4zRvFpPswMePcqOo/edit?ts%3D5d6e8b31%23slide%3Did.p&amp;sa=D&amp;source=editors&amp;ust=1613252067898000&amp;usg=AOvVaw2ONAUKX2vT3LwnIcWt1pm2">measureUntil</a></span></h2><h3 class="c8" id="h.y6tkllobh6wj"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_7ovu51st6e9x-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Nicolás presented proposal for async measurement of event handlers.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Folks mentioned that it seems like something that can be useful for User Timing as well</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Concerns were raised around exposing paint timestamps beyond rAF and the security implications of that (in the context of Event Timing and in general)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Proposal to allow User Timing to declare connection to an event and have that timing entry also appear in Event Timing </span></li></ul><h3 class="c8" id="h.swbi6vhfu3ga"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Nicolás</b>: have some ideas to improve EventTiming</span></p><p class="c0"><span class="c2">… in ET we expose hardware timestamp, before and after running handlers, and next paint</span></p><p class="c0"><span class="c2">… duration is from hardware timestamp to next paint</span></p><p class="c0"><span class="c2">… the objective of this exploration is to figure out how to measure asynchronous work</span></p><p class="c0"><span class="c2">… e.g., frameworks can handle events asynchronously → the browser can’t trace this</span></p><p class="c0"><span class="c2">… e.g., got feedback from React that they can’t use ET because duration is not accurate</span></p><p class="c0"><span class="c2">… anytime you have async tasks (e.g. network fetch), you’ll run into this issue</span></p><p class="c0"><span>… </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/12DfSHMwchzjo_H-C4IiZ3WpQ9EB4zRvFpPswMePcqOo/edit?ts%3D5d6e8b31%23slide%3Did.g6142cfc858_0_182&amp;sa=D&amp;source=editors&amp;ust=1613252067901000&amp;usg=AOvVaw0l4bOzT_wHO0YzDmjoeoW-">Use cases</a></span></p><ul class="c3 lst-kix_8lttz4569w3b-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Click -&gt; fetch image -&gt; add to DOM</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Drag video slider -&gt; buffer video -&gt; start playing again</span></li><li class="c0 c9 li-bullet-0"><span>Enter query -&gt; query server -&gt; display result</span></li></ul><p class="c0"><span>… </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/12DfSHMwchzjo_H-C4IiZ3WpQ9EB4zRvFpPswMePcqOo/edit?ts%3D5d6e8b31%23slide%3Did.g6142cfc858_0_187&amp;sa=D&amp;source=editors&amp;ust=1613252067903000&amp;usg=AOvVaw0N_qZJ1LFbEBF3TbmgtpdW">API shape</a></span></p><p class="c0"><span style="overflow: hidden;<b> display</b>: inline-block;<b> margin</b>: 0.00px 0.00px;<b> border</b>: 0.00px solid #000000;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);<b> width</b>: 624.00px;<b> height</b>: 352.00px;"><img alt="" src="./index_files/Screenshot 2019-09-25 at 10.13.08.png" style="width: 624.00px;<b> height</b>: 352.00px; margin-left: 0.00px; margin-top: 0.00px;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c0"><span class="c2">… once the event is dispatched we wait for all promises to be resolved</span></p><p class="c0"><span class="c2">… once promises resolve, the timestamp allows you to determine duration</span></p><p class="c0"><span class="c2">… we could use the longest timestamp</span></p><p class="c0"><span class="c2">… asyncDurations would keep a map of promise names to durations. For calculating if an event was long and we should expose it, we can take the longest duration.</span></p><p class="c0"><span class="c2">Durations will be till the next paint after the promise was resolved.</span></p><p class="c0"><span class="c2"><b>Tim</b>: I think we can’t use next paint for security reasons, only the next paint from the longest promise.</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: certainly a security concern that needs to be considered. Not sure just the last one would be useful tho.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: what are the security concerns? Visited links?</span></p><p class="c0"><span class="c2"><b>Tim</b>: yeah, all the usual suspects. If you can measure how long an arbitrary frame takes to paint, you can create visited attacks. We said it’s OK for event timing because we only expose events longer than 50 ms. But not OK for arbitrary promises.</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: need to investigate more, maybe throttling, etc.</span></p><p class="c0"><span class="c2">… the reason we have a map is we can have multiple 3rd parties instrumenting events and we don’t want them to step on one another.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: So this assumes the vendor instruments the event?</span></p><p class="c0"><span class="c2"><b>Tim</b>: We think frameworks would instrument their events and analytics relying on that.</span></p><p class="c0"><span class="c2">… a single party might want to look at multiple events it created &nbsp;</span></p><p class="c0"><span class="c2"><b>Ilya</b>: impact on current ET?</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: it would affect duration and when it’s dispatched, but only for those that are instrumented</span></p><p class="c0"><span class="c2"><b>Tim</b>: Not clear how much of that work is using promises today and how easy it would be for folks to switch.</span></p><p class="c0"><span class="c2"><b>Olli</b>: is this event time or is this about user timing? </span></p><p class="c0"><span class="c2"><b>Nicolás</b>: the issue here is knowing the next paint can be a security concern, so want to expose that only in certain scenarios</span></p><p class="c0"><span class="c2"><b>Yoav</b>: would this work for JS generated events?</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: no</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Can you keep adding promises to the event and continuously measure using that?</span></p><p class="c0"><span class="c2"><b>Tim</b>: That’s why we suggested only to measure the last promise resolved. Need to think about it a bit more.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: are we exposing different information from what rAF would expose?</span></p><p class="c0"><span class="c2"><b>Tim</b>: yes, and we determined it was OK due to 50ms threshold we added</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: you could harness mouse moves to get every paint</span></p><p class="c0"><span class="c2"><b>Tim</b>: Good point. Worst case, we’ll have to expose a less accurate timestamp</span></p><p class="c0"><span class="c2">… coming back to User Timing question</span></p><p class="c0"><span class="c2">… I want to instrument both browser generated and JS generated events</span></p><p class="c0"><span class="c2"><b>Olli</b>: Might be a better generic API</span></p><p class="c0"><span class="c2"><b>Tim</b>: Won’t solve those 2 use-cases</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: if there was a way to associate an event in UT.. </span></p><p class="c0"><span class="c2"><b>Nicolás</b>: You can already add metadata to UT</span></p><p class="c0"><span class="c2"><b>Tim</b>: So I’d now need to listen to both event timing and user timing and combine those? </span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: we can add sugar to make this easier</span></p><p class="c0"><span class="c2"><b>Tim</b>: We could, but not clear what’s the advantage. But maybe performance.mark and measure can use a promise based API</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Right, in theory we could even include ET paint~like signals.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Maybe. But want a single place for analytics vendors to look when measuring event responsiveness</span></p><p class="c0"><span class="c2">Ian?: There are multiple people involved: frameworks, developers, analytics providers.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Sure, but how can analytics providers know the semantics of each promise?</span></p><p class="c0"><span class="c2"><b>Tim</b>: I envision e.g. React to have an identifiable event names</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: sure but naming is independent from the UT vs. ET question</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: Use case for non-event driven paints?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Image gallery that changes image every X seconds</span></p><p class="c0"><span class="c2"><b>Tim</b>: So the proposal: add something to UT L3 to say “here’s my associated event”, and if the event is present, we’d also surface this in the EventTiming API. But if you want to do ssimilar things without an event, you can.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Also relevant to the SPA discussion</span></p><p class="c0"><span class="c2"><b>Nic</b>: question on durations: you would still have current timestamps on top of the promise resolution timestamps?</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: yes</span></p><p class="c0"><span class="c2"><b>Nic</b>: But it could delay the delivery of Event Timing.</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: true</span></p><p class="c0"><span class="c2"><b>Philip</b>: Can you hold onto an event and add measureUntil later?</span></p><p class="c0"><span class="c2"><b>Tim</b>: That won’t work because the entry may have already surfaced</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: Argument for the UT approach</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Also a question of precision - can we only expose a rAF timestamp or something more accurate. </span></p><p class="c0"><span class="c2"><b>Tim</b>: We see cases where compositor effects result in significant delay</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Some OSes cannot really measure that</span></p><p class="c0"><span class="c2"><b>Tim</b>: The spec states a best-effort approach</span></p><p class="c0"><span class="c2"><b>Rick</b>: Any data on the difference? Intuition is that compositor costs would be dwarfed by the rest</span></p><p class="c0"><span class="c2"><b>Tim</b>: No hard data, but seen examples where it was significant. But might be less of an issue in other architectures</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Ties into Frame Timing as well</span></p><p class="c0"><span class="c2"><b>Tim</b>: So we need a broader conversation about paint timestamps</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: believe rAF can solve 80-90% of cases and everyone can implement</span></p><p class="c0"><span class="c2"><b>Ilya</b>: +1</span></p><p class="c0"><span class="c2"><b>Tim</b>: Scrolling is often compositing-bound, and want to solve scroll-jank. But we can maybe use a mix where if you don’t use measureUntil you get the high quality timestamp and measureUntil falls back to rAF. In the async case, compositing is likely to be a smaller fraction.</span></p><p class="c0"><span class="c2"><b>Todd</b>: we’ve seen some top properties that have significant compositor time costs. So need data on impact before discounting it.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: can we kill visited?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Even if we kill visited, cross-origin same-process iframes is still a thing</span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.d4pecqxq036l"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1tsVlxh5ukruj3BhzfuIM2yw4WmjoUo5BQEWAEs3zSVo/edit%23slide%3Did.g6013e8087c_0_3&amp;sa=D&amp;source=editors&amp;ust=1613252067915000&amp;usg=AOvVaw2zK9T8ai39sbE5zss9zfxi">IsInputPending</a></span></h2><h3 class="c8" id="h.k1124h3n8vai"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_vmgrc4z9xzgi-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Great results from Chrome Origin Trial, both from Facebook and Akamai</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Current spec language is too vague for following implementations. Would need to be defined more precisely</span></li><li class="c0 c9 li-bullet-0"><span class="c2">isXPending API shape may require some unification</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Iframe exposure requires some more thought around its security implications</span></li></ul><h3 class="c8" id="h.ui68pahkefg9"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Nate</b>: update! Origin Trial on desktop but not mobile.</span></p><p class="c0"><span class="c2"><b>Andrew</b>: not yet available on mobile due to lack of site isolation</span></p><p class="c0"><span class="c2"><b>Nate</b>: The new facebook.com has full scheduling but not enough traffic. Most of the trial used a naive implementation. Results looked good with 100ms reduction</span></p><p class="c0"><span class="c2"><b>Nic</b>: similar results for us. Used that in boomerang and used it to avoid impacting user experience when doing work. Instrumented on some sites but not all, due to Origin Trial limitations. Will help them break up their tasks in a meaningful way. Want to use it everywhere.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Are you using it for attribution that event timing can give you?</span></p><p class="c0"><span class="c2"><b>Nic</b>: Not only that, but also to avoid heavy processing</span></p><p class="c0"><span class="c2"><b>Navid</b>: why those events and not all events?</span></p><p class="c0"><span class="c2"><b>Nate</b>: intentionally left this vague in the spec. Browser may lie in some cases, or may return best-effort results.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Current implementation assumes that no events will get prevented.</span></p><p class="c0"><span class="c2"><b>Phil</b>: How does that interact with FID. can we ignore long tasks if isInputPending was queried?</span></p><p class="c0"><span class="c2"><b>Tim</b>: We could do that ideally, but need to dig into usage in the wild. You’re still blocking rendering, but also you may not yield, so that may not work</span></p><p class="c0"><span class="c2"><b>Olli</b>: the isInputPending spec is too vague. Would be impossible to implement based on it. Would need to look at source code :/</span></p><p class="c0"><span class="c2"><b>Todd</b>: What’s vague?</span></p><p class="c0"><span class="c2"><b>Olli</b>: Click handling is a vague term. Also “may include any UI event”</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Fundamental problem specifying it, as we can’t know what’s in the JS event queue. precise frame tracking makes it tricky. Has to be best-effort. Would making it closer to hardware key events be better?</span></p><p class="c0"><span class="c2"><b>Olli</b>: Closer to mouse down/up would be better</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Seems reasonable</span></p><p class="c0"><span class="c2"><b>Todd</b>: Mapping directly to HTML definitions of the events would work?</span></p><p class="c0"><span class="c2"><b>Olli</b>: It’s not really defined anywhere</span></p><p class="c0"><span class="c2"><b>Nate</b>: that’s the problem we ran into. Can expand to mouse up/down.</span></p><p class="c0"><span class="c2"><b>Olli</b>: Need to get rid of “MAY”, as it’s not clear what it means.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Small set of supported event types that would give us most of the utility?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Something like mouse move would be incredibly noisy. Can add counters to see what people are listening for.</span></p><p class="c0"><span class="c2"><b>Navid</b>: Why “may include UI events”?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: To avoid mouse move</span></p><p class="c0"><span class="c2"><b>Navid</b>: but what other events may be included?</span></p><p class="c0"><span class="c2"><b>Nate</b>: the idea was to make this future compatible when new events get introduced. </span></p><p class="c0"><span class="c2"><b>Nicolás</b>: adding more events can make it easier to misuse. Need to be careful with which events we support</span></p><p class="c0"><span class="c2"><b>Tim</b>: Worried with events that fire too often? One potential solution is to use a * event type to query for everything</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: What other isXPending API we’d have? Could become awkward fast</span></p><p class="c0"><span class="c2"><b>Alex</b>: What happened to shouldYield?</span></p><p class="c0"><span class="c2"><b>Nate</b>: It became this. Different sites care about different things.</span></p><p class="c0"><span class="c2">&nbsp;</span></p><p class="c0"><span class="c2"><b>Navid</b>: is this exposed to subframes?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: want this to rely on hit testing and expose to subframes as well. Can also apply to subframes that share event loops. Decided to go with per-document</span></p><p class="c0"><span class="c2"><b>Todd</b>: so there could be input pending that hasn’t yet reached the hit testing, and only after there is will be reported. Same event-loop frames would need access, but there’s some security implications.</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Maybe we can filter out cross origin events, to make that safe.</span></p><p class="c0"><span class="c2"><b>Navid</b>: what happens when hit testing fails to know the target?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Still TBD.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Worst case, we want to let the browser say “I can’t reliably tell which frame this input is associated with, so I won’t tell anyone about it”</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: could encourage more blocking scripts</span></p><p class="c0"><span class="c2"><b>Tim</b>: We’d also want to measure how often that happens</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Main things to be concerned about are focus and frame movement. Can hamstring the API when frames get moved. Focus is a bit more common.</span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.kryll0txlacb"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/12FMY5WMpyhkC7S9TmB8MluABITxlY-7yo_5AlIfjacg/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067924000&amp;usg=AOvVaw1c6nJ00oEZYCNHZB_rYc9D">Reporting</a></span></h2><h3 class="c8" id="h.t70e4wv0mogg"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_tbf4cq2mnbzk-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Agreed to split ephemeral reporting from persistent reporting, where persistent will be incubated as a separate document.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Batching and sampling can remain in ephemeral reporting</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Move to structured headers would limit per endpoint parameters - need to open issues on SH</span></li><li class="c0 c9 li-bullet-0"><span>Apple needs to further review the security aspects of ephemeral reporting</span></li></ul><h3 class="c8" id="h.dpvag0ahr606"><span>Minutes</span></h3><p class="c0"><span class="c2"><b>Ian</b>: Recently took over editing. Excited to see Mozilla involved</span></p><p class="c0"><span class="c2"><b>Two distinct use cases</b>: Tentatively calling them ephemeral and persistent.</span></p><p class="c0"><span class="c2"><b>Ephemeral reporting is for all reports which can be tied to events occurring within a document</b>: CSP, Feature Policy, Crash Reports, Deprecations, Interventions.</span></p><p class="c0"><span class="c2">For ephemeral Report-To should just work</span></p><p class="c0"><span class="c2">Persistent reporting is another use-case. Main case is NEL, but also other out-of-band reports. For these, we want to support persistent reporting configuration, and report completely out-of-band, for cases where perhaps there isn't an active document.</span></p><p class="c0"><span class="c2">Mozilla would like to support ephemeral, so we want to move persistent out so that it can be reasoned about separately, but still leave building blocks so that we can build NEL on top of it..</span></p><p class="c0"><span class="c2">Don't need for ephemeral: Persistent configuration, delivery after the document has been closed, batching reports, possibly failover and retry (though those may be useful), sampling (Could also be useful, but may not technically be needed)</span></p><p class="c0"><span class="c2"><b>Ilya</b>: We did hear about the sampling use-case for CSP. So we do need it for ephemeral. It does feel like there are some low-level primitives that can be useful there.</span></p><p class="c0"><span class="c2"><b>Anne</b>: How does sampling work?</span></p><p class="c0"><span class="c2"><b>Ian</b>: It generates a random number for each report based on the sampling rate</span></p><p class="c0"><span class="c2"><b>Ian</b>: How can we remove the persistent requirements? Make them optional? Make them a separate spec? Or make a Level 1 / Level 2 spec?</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: What is the goal? What are you trying to do?</span></p><p class="c0"><span class="c2"><b>Ian</b>: Enable shipping ephemeral reporting without things needed only for persistent reporting, without forcing implementers to build support for features they are not intending to ship.</span></p><p class="c0"><span class="c2">Right now implementing the reporting spec means you need to implement persistency features that are not needed for per-document reporting.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: when we incubated reporting, NEL was the main driver for many of the features. The two were developed side by side. Only afterwards we added intervention reports, which have a much simpler subset of requirements.</span></p><p class="c0"><span class="c2"><b>Alex</b>: This really feels like Level 1 / Level 2 to me.</span></p><p class="c0"><span class="c2"><b>Anne</b>: You could have the core thing, that I think most browsers agree on, and then the persistent thing separate. There is also some sorting out to be done there because some of it is just not acceptable. </span></p><p class="c0"><span class="c2"><b>Yoav</b>: So, separate document, or…?</span></p><p class="c0"><span class="c2"><b>Anne</b>: Separate document, if we don't agree on the design.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: I think it needs to be a separate document, otherwise you could very easily introduce interdependencies within the same document.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: We got feedback from Mozilla on Navigation Timing and Resource Timing, and the dependencies between them, that Mozilla would like to see them united</span></p><p class="c0"><span class="c2"><b>Anne</b>: If at some point we can agree on the design, then we can merge them. Incubate first as a separate document.</span></p><p class="c0"><span class="c2"><b>Alex</b>: Concerned about the testability. If it's only usable by these other things that build on top of it, could we have a collection of unit tests for reporting, or do we have to go through the other APIs?</span></p><p class="c0"><span class="c2"><b>Ian</b>: WPT has a webdriver API that can drive those reports and makes them testable</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Also reporting has a few features that can may be testable</span></p><p class="c0"><span class="c2"><b>Ian</b>: Yes, but those features are Crash, Deprecation, and Intervention, and those are not </span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Sounds like persistency is L2</span></p><p class="c0"><span class="c2"><b>Ilya</b>: let’s talk about the features that should go into ephemeral</span></p><p class="c0"><span class="c2"><b>Ian</b>: Proposal - move report config syntax to Origin Policy. Restrict batching to per document or per agent cluster. Remove max_age</span></p><p class="c0"><span class="c2">For the persistent functionality, we decided that we want to move it to a separate document.</span></p><p class="c0"><span class="c2"><b>Anne</b>: For batching and sampling, they seem fine to remain in ephemeral</span></p><p class="c0"><span class="c2"><b>Ian</b>: For opt-in, Brave wanted user opt-in for 3rd party reporting.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Related, how does report API interacts with extensions/fetch?</span></p><p class="c0"><span class="c2"><b>Ian</b>: Reports skip SW. Extensions are UA defined.</span></p><p class="c0"><span class="c2"><b>Anne</b>: also per-document reporting gets complicated with batching. SW should definitely skipped in those cases</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Need to note that in the privacy section.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: users won’t understand the implications of error reporting to different origins. Prompting that won’t be a good security mitigation</span></p><p class="c0"><span class="c2"><b>Ian</b>: similar to background sync</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: users are more likely to understand that</span></p><p class="c0"><span class="c2"><b>Anne</b>: 3rd parties are allowed to fetch</span></p><p class="c0"><span class="c2"><b>Yoav</b>: there’s a difference between in-document third party reporting and persistent one.</span></p><p class="c0"><span class="c2"><b>Anne</b>: Oh, yeah. In the persistent that’s indeed different. </span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Ian</b>: Let’s talk about structured headers - currently we have JSON. hard to fit into structured headers</span></p><p class="c0"><span class="c2">Simple dict - lose parameters on different URLs</span></p><p class="c0"><span class="c2">Dictionaries with inner list - proposal to add parameters to inner lists. We lose the ability to have parameters that apply to the end point</span></p><p class="c0"><span class="c2"><b>Ilya</b>: sampling is one example. Regarding priority, need to talk to NEL</span></p><p class="c0"><span class="c2"><b>Ian</b>: Another option - define endpoints and groups in different headers, but it’s not great</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Yoav</b>: Have Apple looked into ephemeral reporting? Interested in that?</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: still concerned about cross-origin reporting even for per-document reporting without credentials, as well as tracking potential using the persistent API.</span></p><p class="c0"><span class="c2"><b>Anne</b>: cross-origin reporting is equivalent to fetching the same data</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: could be OK. Need to do a strict sec review</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Todd</b>: So the idea is that there’s a mechanism and a few features that use it (e.g. CSP). Then there are crashes, deprecations and interventions that are defined directly in the API.</span></p><p class="c0"><span class="c2"><b>Anne</b>: Where do crash reports stand?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: In the spec. Would be nicer to split features from infrastructure.</span></p><p class="c0"><span class="c2"><b>Anne</b>: Crashes that impact the entire agent cluster pose interesting questions as to where those reports should be sent.</span></p><p class="c0"><span class="c2"><b>Todd</b>: spec defines oom, unresponsive and else for crash reasons</span></p><p class="c0"><span class="c2"><b>Vlad</b>: important to Facebook to distinguish those reporting concerns</span></p><p class="c0"><span class="c2"><b>Ilya</b>: can consider pulling some of the features to a stand alone spec</span></p><p class="c0"><span class="c2"><b>Anne</b>: might be OK to leave crashes in</span></p><p class="c0"><span class="c2"><b>Todd</b>: features beyond CSP?</span></p><p class="c0"><span class="c2"><b>Anne</b>: Interested in crashes, COOP, feature policy</span></p><p class="c0"><span class="c2">&lt;discussion on feature policy and opinionated reporting&gt;</span></p><h2 class="c6" id="h.vdd4eb5nfzlk"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1jEGiLCQMnxLRL5r_ss4R0xBjf8QdGRkjTGrAfbZPASc/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067936000&amp;usg=AOvVaw02-vBTdLq9wYsiBOECj2Wf">Single Page Apps Monitoring</a></span></h2><h3 class="c8" id="h.m8a1ogl2hsib"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_gbtnpw2azggi-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Tim Dresser presented a proposal to measure soft navigations.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Agreement in the room on </span></li></ul><ul class="c3 lst-kix_gbtnpw2azggi-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">the shape of the API proposed, and that it should re-dispatch various “First-*” entries (as security permits) as a carrot for developers to use this</span></li><li class="c0 c10 li-bullet-0"><span class="c2">avoiding side-effects to such measurement (e.g. killing in-flight requests)</span></li><li class="c0 c10 li-bullet-0"><span class="c2">aiming to solve navigations that cover most of the page, rather than smaller transitions. Specifically, simultaneous transitions are out-of-scope.</span></li></ul><ul class="c3 lst-kix_gbtnpw2azggi-2 start"><li class="c0 c23 li-bullet-0"><span class="c2">At the same time, there was interest in LCP data for smaller transitions</span></li><li class="c0 c23 li-bullet-0"><span class="c2">In the case of navigations, “end” timestamp probably doesn’t make sense and/or may not be enough</span></li></ul><h3 class="c8" id="h.3syqz9duwmjo"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Tim</b>: being clear on use cases we’re solving for is critical. Not all of them are navigations</span></p><p class="c0"><span class="c2">… UC1: click → full page transition, maybe url change</span></p><p class="c0"><span class="c2">… this is the use case that we probably need to prioritize</span></p><p class="c0"><span class="c2">… UC2: click → minor transition</span></p><p class="c0"><span class="c2">… UC3: a video site transitions to the next video: no input, URL change</span></p><p class="c0"><span class="c2">… UC4: Ad rotation, makes things tricky because you now may have multiple transitions</span></p><p class="c0"><span class="c2">… Goals:</span></p><ul class="c3 lst-kix_96kta2oflxbn-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Redispatch load entries</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Read entries relative to transition start time.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Can use input event timestamp as start time but input isn’t required.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Doesn’t require history.pushState, but can optionally associate URL change</span></li><li class="c0 c9 li-bullet-0"><span class="c2">No explicit integration with analytics providers required.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Transitions can take place simultaneously</span></li></ul><p class="c0"><span class="c2"><b>Ben</b>: is simultaneous transitions a critical req?</span></p><p class="c0"><span class="c2"><b>Tim</b>: good question, that’s what we want to answer here. If we punt, life is easier.</span></p><p class="c0"><span class="c2"><b>Ben</b>: let’s punt it</span></p><p class="c0"><span class="c2"><b>Yoav</b>: ad use case is probably addressed via iframes, they have their own timeline</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: the use case is ~main part of application is changing</span></p><p class="c0"><span class="c2"><b>Tim</b>: yes</span></p><p class="c0"><span class="c2"><b>Ben</b>: What do you mean by “explicit integration with analytics”</span></p><p class="c0"><span class="c2"><b>Tim</b>: Analytics providers don’t need to be aware of how your app is built and annotated</span></p><p class="c0"><span class="c2"><b>Ilya</b>: redispatching entries is one of the main carrots here, but we need to be careful as not everything can be redispatched, for security reasons</span></p><p class="c0"><span class="c2"><b>Tim</b>: few potential solutions: low quality timestamps, throttle the API, etc. Need to give it some thought</span></p><p class="c0"><span class="c2"><b>Yoav</b>: At the F2F we mentioned killing network requests in soft navigation scenarios. Could be a carrot.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Feels like a giant footgun</span></p><p class="c0"><span class="c2"><b>Tim</b>: Redispatching entries should be sufficient</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2">Tim:</span></p><p class="c0"><span style="overflow: hidden;<b> display</b>: inline-block;<b> margin</b>: 0.00px 0.00px;<b> border</b>: 0.00px solid #000000;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);<b> width</b>: 624.00px;<b> height</b>: 352.00px;"><img alt="" src="./index_files/Screenshot 2019-09-26 at 09.37.47.png" style="width: 624.00px;<b> height</b>: 352.00px; margin-left: 0.00px; margin-top: 0.00px;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c0"><span class="c2">When a transition occurs, we add an entry with some data, including the pushState URL if there is one. Feels annoying to have to call both pushState and add data about it here.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Yeah, but this API is about measurement, and we don’t want it to have side effects. Also, different frameworks have different patterns to when the URL is changed.</span></p><p class="c0"><span class="c2"><b>Tim</b>: So should the URL be in details?</span></p><p class="c0"><span class="c2"><b>Ben</b>: Yes.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Also, the browser knows what was the URL when this was called</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Yeah, but the URL may be changed after transitionStart.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Also, I wouldn’t tie to pushState as the history API may be revamped in ways that can help that API’s goals.</span></p><p class="c0"><span class="c2"><b>Tim</b>: And if it does, we can still tie in to that later. Also, if we’re dropping the transition use case and just focus on navigations, we can drop the “end time” part.</span></p><p class="c0"><span class="c2"><b>Tim</b>: one of the key things you need to do is being able to query transitions</span></p><p class="c0"><span class="c2">… effectively, this is a signal about your time origin. Seems better than changing the time of the different entries. All performance entries will be surfaces with the page’s time origin.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: OK. Regarding “name”, even when multiple simultaneous transitions are not needed, “name” can help people understand which is which.</span></p><p class="c0"><span class="c2"><b>Ben</b>: yeah. A list of names rather than a stack.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Would people need to full list or just the last one?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Probably need the full list to reason about the different performance entries.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Global time origin enables us to coordinate time origins between window and workers. Maybe we can create a “transition time origin” that can help coordinate those different time origins in a similar way</span></p><p class="c0"><span class="c2"><b>Nic</b>: is there an observer to be notified of new transitions?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Good point, there should be.</span></p><p class="c0"><span class="c2"><b>Todd</b>: Will we have transition mark start/end, etc?</span></p><p class="c0"><span class="c2"><b>Tim</b>: If we focus on navigation, there’s no “end”. But you could imagine UT L3 adding an “is transition” flag rather than a new API call.</span></p><p class="c0"><span class="c2"><b>Todd</b>: So developers can add their own “end” UT calls</span></p><p class="c0"><span class="c2"><b>Yoav</b>: one use case of having an end is to allow developers to signal own ~end, and analytics can collect it</span></p><p class="c0"><span class="c2"><b>Tim</b>: My intuition is that one timestamp is not enough</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: this feels related to the broader discussion of “end” signal, we can separate this</span></p><p class="c0"><span class="c2"><b>Steven</b>: So “transitionStart” will reset all the navigation related entries?</span></p><p class="c0"><span class="c2"><b>Tim</b>: It would cause them to be re-dispatched</span></p><p class="c0"><span class="c2"><b>Ian</b>: what happens if you have transition when one is active</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: you probably only dispatch the last one, we wouldn’t claim that in flight one is finished</span></p><p class="c0"><span class="c2"><b>Todd</b>: How do we handle async transition start where user input may be happening while we’re handling it?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Feels like this can also on full page loads.</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Ben</b>: what about redirects?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: redirects are handled further down the stack. </span></p><p class="c0"><span class="c2"><b>Ilya</b>: There could be cases where you have multiple transitions: one kicking off a spinner and then another that loads the final page.</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Will</b>: regarding naming, would be nice to avoid transition- prefixes on all the metrics. Maybe have multiple entries.</span></p><p class="c0"><span class="c2"><b>Tim</b>: There may be compatibility problems with current handlers or with current data collectors in case developers adopted the API before their analytics providers</span></p><p class="c0"><span class="c2"><b>Ilya</b>: We can probably talk to analytics folks to prevent that.</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Philip</b>: want to consider use case of URL changes, hanging on pushState</span></p><p class="c0"><span class="c2">… that would enable all of the existing apps to have this auto-instrumented</span></p><p class="c0"><span class="c2"><b>Tim</b>: so it the question “do we care about transitions without URL change?”</span></p><p class="c0"><span class="c2"><b>Philip</b>: I think UA can take care of that. </span></p><p class="c0"><span class="c2"><b>Yoav</b>: We definitely want an explicit signal for people who care. And then we can ask: can browsers heuristically point transition start without it? Because different frameworks kick off transitions at different times compared to pushState, this can be hard.</span></p><p class="c0"><span class="c2"><b>Philip</b>: Maybe a flag on the performance entry can indicate what heuristic was considered </span></p><p class="c0"><span class="c2"><b>Ilya</b>: I can imagine analytics providers using the same heuristics today</span></p><p class="c0"><span class="c2"><b>Todd</b>: If you have to opt-in to PerfObserver to get the entries, you’d need some change in code to collect it.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: You want analytics providers to collect it without application developers changing code</span></p><p class="c0"><span class="c2"><b>Philip</b>: Also CrUX</span></p><p class="c0"><span class="c2"><b>Tim</b>: But those numbers won’t be comparable.</span></p><p class="c0"><span class="c2"><b>Eric</b>: you would be able to compare yourself to yourself.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Maybe we can use frameworks to make sure this happens in reasonable timeframes.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: When the user clicks, you may not know where they’d end up.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Sure but you can still mark transition start.</span></p><p class="c0"><span class="c2"><b>Steven</b>: You can use that for any UI changing event, no?</span></p><p class="c0"><span class="c2"><b>Tim</b>: It doesn’t make sense to use it too often. There are always security issues.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: I don’t think we should care about partial updates.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Event Timing should handle those cases</span></p><p class="c0"><span class="c2"><b>Steven</b>: And the developer will indicate done at the end of UI transitions?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: measureUntil</span></p><p class="c0"><span class="c2"><b>Steven</b>: But in our case, we have no access to Event Timing, as we instrument other people’s code</span></p><p class="c0"><span class="c2"><b>Tim</b>: Current proposal doesn’t allow getting paints without reseting the time origin. Would that help?</span></p><p class="c0"><span class="c2"><b>Steven</b>: It would.</span></p><p class="c0"><span class="c2"><b>Todd</b>: And for long tasks, you’d be able to correlate them with transitions</span></p><p class="c0"><span class="c2"><b>Steven</b>: Yeah, and naming transitions would help there with long task attribution to user gestures.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: I wonder if “transition” is the right terminology</span></p><p class="c0"><span class="c2"><b>Tim</b>: Yeah, it may be over general. </span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Tim</b>: Shall we talk about cancelling in-flight requests?</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Seems related to the problem of observing what’s in-flight</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Maybe when we would observe in-flight fetches, we could make those fetches cancellable</span></p><p class="c0"><span class="c2"><b>Will</b>: Agree that we should avoid side effects for measurements</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: There are many cases where you don’t want to cancel in-flight requests during transitions, so need to give granular controls</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Will</b>: Do we want to consider simultaneous transitions in the future? Or are we painting ourselves into a corner by not considering them?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Tim explicitly asked that question, and no one seems eager to tackle them as part of the same use-case.</span></p><p class="c0"><span class="c2"><b>Tim</b>: incremental step forward can be analytics vendors looking at the latest transition.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Seems like most of them can be done using measureUntil</span></p><p class="c0"><span class="c2"><b>Yoav</b>: iframes can also tackle the ad transition use-case</span></p><p class="c0"><span class="c2"><b>Steven</b>: The nice part about this is getting the Largest-Contentful-Paint info. Can we get that with measureUntil?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: That’s just the first paint</span></p><p class="c0"><span class="c2"><b>Steven</b>: I can definitely see scenarios where LCP would be useful here.</span></p><p class="c0"><span class="c2"><b>Tim</b>: as we think about connection event timing and user timing, we can come up with patterns that would enable you to do that. More thought required.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: you want to support non-navigation changes, right? We decided against supporting it here. Maybe we can have options on measureUntil to provide LCP after it.</span></p><p class="c0"><span class="c2"><b>Philip</b>: Do we really want to reset the time origin?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Not really resetting but providing an alternative one. </span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Tim</b>: Got a lot of great feedback, thanks!</span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.s3zkff3a00fs"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1JB4g18nnXCMdCgKweqxLJYh-Xm44ET1SBvmkLi2mRFc/edit&amp;sa=D&amp;source=editors&amp;ust=1613252067956000&amp;usg=AOvVaw0Y-yQaRjHuPjVj4zp4zpFy">CompressStream</a></span></h2><h3 class="c8" id="h.737l1yxdon0e"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_bljincqjyzs0-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Use cases seem interesting, would be good to gather all possible ones and then decide which ones are worth supporting</span></li></ul><ul class="c3 lst-kix_bljincqjyzs0-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">Some related to capabilities (e.g. ZIP, EPUB, SSH)</span></li><li class="c0 c10 li-bullet-0"><span class="c2">Others related to compression ratios (e.g. Brotli compression, zopfli)</span></li><li class="c0 c10 li-bullet-0"><span class="c2">Support has maintenance and binary size costs</span></li></ul><ul class="c3 lst-kix_bljincqjyzs0-0"><li class="c0 c9 li-bullet-0"><span class="c2">No need to specify binary output of the algorithms. Options (e.g. compression level) can provide hints. Potential foot-gun options should be gated behind scary option names.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Apple wants clear criteria regarding when support for new algorithms should be added</span></li><li class="c0 c9 li-bullet-0"><span class="c2">ZIP bombs can be an issue. Developers should be careful when decompressing unvalidated input.</span></li></ul><h3 class="c8" id="h.vfqk7778zboj"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Adam</b>: use cases: compressed upload, particularly analytics use cases</span></p><p class="c0"><span class="c2">… Lazy decompression for downloads, compression/decompression for native files, etc.</span></p><p class="c0"><span class="c2">… Applications try to do this today</span></p><p class="c0"><span class="c2"><b>Andrew</b>: @FB we tried to compile gzip to WASM and we saw 20% hit compared to native</span></p><p class="c0"><span class="c2"><b>Adam</b>: status, FB has prototype of CompressionStream, Google has DecompressionStream</span></p><p class="c0"><span class="c2">… aiming to get experimental support in Chrome this month</span></p><p class="c0"><span class="c2"><b>Yoav</b>: why limit gzip and deflate? What about brotli, z-std, etc?</span></p><p class="c0"><span class="c2"><b>Adam</b>: we could add more in the future, the question is of cost of including library in binary</span></p><p class="c0"><span class="c2">… e.g., Brotli compression would require including ~140KB in the binary</span></p><p class="c0"><span class="c2">… because we only include decompression</span></p><p class="c0"><span class="c2">… we could entertain only decompression, but is that useful?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: seems like the value of brotli 11 for upload compression is questionable</span></p><p class="c0"><span class="c2"><b>Eric</b>: which “deflate” variant are you talking about?</span></p><p class="c0"><span class="c2"><b>Adam</b>: Need to clarify that </span></p><p class="c0"><span class="c2"><b>Eric</b>: particular use case I’m interested in zip reader</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Other specific use-cases: browser based SSH client would require options</span></p><p class="c0"><span class="c2"><b>Domenic</b>: second that, epubs, different publishing formats, etc</span></p><p class="c0"><span class="c2"><b>Adam</b>: had folks saying we should support “deflate” rather than “gzip”. Need to come up with a new name for “deflate” if it’s ambiguous</span></p><p class="c0"><span class="c2"><b>Eric</b>: how liberal will you be? E.g. gzip checksums, etc.</span></p><p class="c0"><span class="c2"><b>Adam</b>: interesting, will have to think about it</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Worthwhile to flesh out the use cases: for gzip you might want to specify option for flush strategy</span></p><p class="c0"><span class="c2">… for example, SSH clients require particular strategy and Java didn’t support it</span></p><p class="c0"><span class="c2">… which made implementing a SSH client impossible in Java</span></p><p class="c0"><span class="c2"><b>Adam</b>: what about levels? 1-9, fast-medium-high, …? Don’t want to force specific byte output in the standard. Would prevent implementation improvements over time</span></p><p class="c0"><span class="c2"><b>Yoav</b>: what are the problems with not specifying exact byte output? We can treat the levels as a hint to the compressor as long as the output is zlib compatible</span></p><p class="c0"><span class="c2"><b>Adam</b>: Also, people suggested Zopfli should be level 11</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Similarly to the brotli 11 use case - farfetched for in-browser compression, and the scale is not linear</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Different browsers will encode differently, but that’s not a problem</span></p><p class="c0"><span class="c2"><b>Will</b>: Will that compression definition matter for compatibility?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Decompressors shouldn’t care. Upload size may be different between implementations <br><b>Domenic</b>: second Ryosuke’s point on not over-specifying the byte format. Canvas has a similar 0-1 quality parameters and implementations can interpret that as they want. If the goal is heuristic control over the CPU/byte-size tradeoff something like that is enough.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: lossy compression may be different, but OK for lossless</span></p><p class="c0"><span class="c2"><b>Yoav</b>: as long as the decompressor can deal with it, that’s fine</span></p><p class="c0"><span class="c2"><b>Eric</b>: If we wanted to add brotli/zopli 11, would be unfortunate if web applications became unusable</span></p><p class="c0"><span class="c2"><b>Yoav</b>: maybe gate that use-case (if necessary) behind a different option, not just one more level</span></p><p class="c0"><span class="c2"><b>Eric</b>: window sizes can also be abused</span></p><p class="c0"><span class="c2"><b>Adam</b>: It’s fine, as you can define the same on the decompressor side</span></p><p class="c0"><span class="c2"><b>Yoav</b>: isn’t gzip limited to 32K windows?</span></p><p class="c0"><span class="c2"><b>Eric</b>: there are different scenarios - ZIP can use larger windows. So you want to keep that option available, just make sure it’s not a footgun. How much can we guide developers towards safe options.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: if the decompressor can’t deal with the output, that’d be an issue.</span></p><p class="c0"><span class="c2"><b>Eric</b>: Depending on what the decompressor is. Should the API (as a compressor) be able to produce deflate64? To what extent should the API guide developers towards “standard” algorithms. So that without options, the output is guaranteed to be browser decodable. &nbsp;And with specific options, I can go beyond that.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Yeah, but browsers using this API for decompression could decode any output, e.g. using compression dictionaries. So if you control both ends, you can do weird things. </span></p><p class="c0"><span class="c2">… Otherwise, potential footguns should have a scarier name than just a different level.</span></p><p class="c0"><span class="c2">… EPUB, ZIP, etc are capabilities that would be good to support. Extra 20% of compression at the price of x1000 CPU time doesn’t seem like a critical use case to me for one time uploads</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Adam</b>: future algorithms</span></p><ul class="c3 lst-kix_7inyfcyskz6s-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">LZ4 - very high throughput, low compression ratio</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Snappy - similar to LZ4, already compiled into Chrome and Firefox</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Zstd - medium throughput, medium compression ratio</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Brotli - low compression throughput, high compression ratio</span></li></ul><p class="c0"><span class="c2"><b>Domenic</b>: Can we say that we’ll never remove brotli from the platform?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: yeah, brotli is web-exposed not going anywhere</span></p><p class="c0"><span class="c2"><b>Eric</b>: yeah, that’s different from Snappy, that’s used in Chromium internally, but can be replaced in the future</span></p><p class="c0"><span class="c2"><b>Todd</b>: so brotli and zlib are both exposed and reusable. There’s the question of when should we add another compression algorithm. When does it add sufficient benefits to outweigh the costs.</span></p><p class="c0"><span class="c2"><b>Adam</b>: we can do origin trials of different algorithms to measure benefits/costs before shipping.</span></p><p class="c0"><span class="c2"><b>Eric</b>: can you detect which algorithms supported, would it be possible to polyfill?</span></p><p class="c0"><span><b>Adam</b>: yes, we can expose algorithms and app can add own to the list</span></p><p class="c0"><span class="c2"><b>Alex</b>: Would be good to have clear criteria as to when new algorithms will be added.</span></p><p class="c0"><span class="c2"><b>Adam</b>: binary size would be a limiting factor to adding new algorithms. Dominic Cooney suggested randomizing the results of feature detection to prevent UA sniffing</span></p><p class="c0"><span class="c2"><b>Yoav</b>: may cause an opposite impact. Also, not a problem specific to this API, but a generic one</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Yoav</b>: worker availability?</span></p><p class="c0"><span class="c2"><b>Adam</b>: yep, planning on it</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: in the explainer, would be good to have some concrete use cases + why some algorithms were added</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Eric</b>: How would decompression stream be consumed? Would zip bomb attacks be an issue here?</span></p><p class="c0"><span class="c2"><b>Adam</b>: were looking at making additions to Streams to better handle it. Best current approach is to split into 1K chunks. Stream should provide a feedback that allow the transformer to know when stuff is read.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: 1K chunk can decompress to a very large one. Can the API refuse to decompress zip bombs?</span></p><p class="c0"><span class="c2"><b>Adam</b>: May not be necessary. There may be use cases for intentional zip bombs. We could implement it, but seems extreme. If you’re reading in a streaming fashion with small chunks, you’d be fine. If you throw it into the Response object, you’d run out of memory.</span></p><p class="c0"><span class="c2"><b>Eric</b>: OOM exception seems fine as long as it’s not a slow and weird failure</span></p><p class="c0"><span class="c2"><b>Adam</b>: you’d get a clean OOM crash, killing the renderer</span></p><p class="c0"><span class="c2"><b>Yoav</b>: and you shouldn’t decompress random stuff. So you probably want to do some validation of that. You could similarly create such a zip bomb against the current network stack decompressors.</span></p><p class="c0"><span class="c2"><b>Eric</b>: Also, server side validation can result in DoS. One of the reasons upload compression is not universally supported.</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.uq5au3okuh8b"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/1UhRwMHB8sy7fw5wMZiFGjBaSGiIbXhAIj415SXtxWeM/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252067971000&amp;usg=AOvVaw3pabFW7F-LV9QhJ-ehpyQw">JS-Self profiling</a></span></h2><h3 class="c8" id="h.r5vvcznfmc2q"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_wxewwta1hpt8-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Currently in Origin Trial</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Discussion about opt-in and security-related COEP limitations</span></li><li class="c0 c9 li-bullet-0"><span class="c2">LongTask attribution may rely on that, but it may introduce unexpected overhead, or miss attribution from the beginning of those long tasks</span></li></ul><ul class="c3 lst-kix_wxewwta1hpt8-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">Baking sampling into opt-ins may help reduce the overhead for the general population</span></li></ul><ul class="c3 lst-kix_wxewwta1hpt8-0"><li class="c0 c9 li-bullet-0"><span class="c2">Apple concerned about performance implications and inconsistencies. Wants to further study the polyfill’s performance improvements</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Microsoft sites may be good candidates for the Origin Trial</span></li></ul><h3 class="c8" id="h.ieciz0c4ddvs"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Andrew</b>: sampling profiler for user JS</span></p><p class="c0"><span class="c2">… ECMA realm level isolation + only same origin / CORS exposed scripts</span></p><p class="c0"><span class="c2">… current status: in blink/v8 and origin trial in M78</span></p><p class="c0"><span class="c2">… constraints we arrived at: coarse sample interval on Windows (16ms)</span></p><p class="c0"><span class="c2">… symbol map built on profile start, forced us to do some expensive work at start</span></p><p class="c0"><span class="c2">… requires COOP/COEP as this has similar constraints to shared arraybuffer’s</span></p><p class="c0"><span class="c2">… Let first-party page specify if profiling is enabled.. What impact does it have? Would make it more challenging for 3rd party analytics to collect this.</span></p><p class="c0"><span class="c2"><b>Nic</b>: Akamai could inject headers, but analytics on its own cannot - so would make some scenarios harder</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Considered Feature Policy for the opt-in?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: brought it up on a call, but subframe propagation was considered unnecessary</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Do you want subframes to enable profiling?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: interesting point</span></p><p class="c0"><span class="c2"><b>Yoav</b>: motivation for opt-in is performance?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Mostly. Also concerns that random 3P scripts would enable this</span></p><p class="c0"><span class="c2"><b>Ilya</b>: Sense for the overhead?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: overhead: 10ms samples → ~4-5% overhead, but implementation specific</span></p><p class="c0"><span class="c2"><b>Todd</b>: it is possible to build 1ms sampling profiler with 1% overhead. Windows built-in profiler does that. </span></p><p class="c0"><span class="c2"><b>Andrew</b>: Also need to integrate this with WebDriver, to make it testable.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: combination of COOP/COEP and opt-in will make it harder to enable at scale. May be necessary, but will have that impact.</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Would be great if we can find a way to avoid adding that restriction.</span></p><p class="c0"><span class="c2">???: How is sampling done?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Sampling is done at the UA level using a sample interrupt. Part of the reason why the UA can override the developer request sampling interval. Current implementation is fairly conservative.</span></p><p class="c0"><span class="c2"><b>Steven</b>: can we inspect extension code?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: only if it’s CORS enabled. Only things that would show up in error stacks today</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Tim</b>: hope is that we can reuse this for LongTask attribution</span></p><p class="c0"><span class="c2">… e.g., if you cross a threshold of task length, we start collecting samples</span></p><p class="c0"><span class="c2">… this wouldn’t give you attribution at the beginning of the task</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Can’t we use the LT registration as a signal to profile?</span></p><p class="c0"><span class="c2"><b>Tim</b>: That would add overhead to all your tasks. We want to sample only during LTs</span></p><p class="c0"><span class="c2"><b>Andrew</b>: The first time the profiler is enabled, would need to walk the heap</span></p><p class="c0"><span class="c2"><b>Tim</b>: Need to opt-in in advance. We want to see if people would need that attribution separate from the profiler, or if people would just turn on profiler and use timestamps to correlate.</span></p><p class="c0"><span class="c2"><b>Pierre</b>: if you start the profiler only after the task is running, you won’t know what started the task</span></p><p class="c0"><span class="c2"><b>Alex</b>: Want to make sure most users don’t have that enabled. Feels weird to turn it on as a side effect</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Maybe we need sampling for long task attributions. Sampled registration can help here</span></p><p class="c0"><span class="c2"><b>Tim</b>: other vendors have thoughts?</span></p><p class="c0"><span class="c2"><b>Marcus</b>: yeah. The restrictions seem necessary. Will need to recompile code when enabling profiling, so there would be an initial overhead. But if that’s expected, that seems doable. The main problem is that currently it’s not yet stable for production use.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: going back to sampling, an explicit opt-in that tell the browser to kick off profiling ahead of time, might be good to bake in sampling into that.</span></p><p class="c0"><span class="c2"><b>Steven</b>: How would that look like?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Header or meta tag</span></p><p class="c0"><span class="c2"><b>Yoav</b>: meta tags are typically easier to deploy</span></p><p class="c0"><span class="c2"><b>Nic</b>: If the goal is for the origin to opt-in, can 3P JS add that</span></p><p class="c0"><span class="c2"><b>Andrew</b>: maybe only pre-parser based</span></p><p class="c0"><span class="c2"><b>Marcus</b>: Developers may start to rely on specific strings they get from JS stacks, or if DOM calls are exposed. That can create compat issues.</span></p><p class="c0"><span class="c2"><b>Andrew</b>: DOM calls seem relevant. The strings in JS stacks should fall from ECMA-262</span></p><p class="c0"><span class="c2"><b>Marcus</b>: should the spec discourage people from relying on specific strings?</span></p><p class="c0"><span class="c2"><b>Andrew</b>: Good point. Need to investigate DOM exposure.</span></p><p class="c0"><span class="c2"><b>Alex</b>: Concerned by potential perf implications and inconsistencies in performance.</span></p><p class="c0"><span class="c2"><b>Andrew</b>: At Facebook we serve instrumentation to all users, this will allow profiling only for a sample.</span></p><p class="c0"><span class="c2"><b>Alex</b>: Want to see the list of issues fixed in the polyfill.</span></p><p class="c0"><span class="c2"><b>Marcus</b>: same!</span></p><p class="c0"><span class="c2"><b>Todd</b>: Microsoft sites are likely to want to get on the origin trial bandwagon.</span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.181ai150wl3"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/10jAXSTe71s7v-O2H6Vv69SyoFTGJKEesXCXqAuQA5Ps/edit&amp;sa=D&amp;source=editors&amp;ust=1613252067981000&amp;usg=AOvVaw1hco6OlCLBtWglLCB9U9WN">Frame Timing</a></span></h2><h3 class="c8" id="h.tt2awsqeuqmi"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_ze4pl2ewl5ws-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Use case seems legitimate. Everyone agrees that rAF polling is awful.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Dropped frames seem more useful than long frames.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Apple would have a hard time reporting dropped frames due to their architecture</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Excel would love to also have some coarse attribution for dropped/long frames</span></li></ul><h3 class="c8" id="h.8b9jcqot1q9h"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Nicolás</b>: Motivation is to measure how smoothly content is being rendered</span></p><p class="c0"><span class="c2">… prevent expensive rAF-polling</span></p><p class="c0"><span class="c2"><b>Tim</b>: dropped frames vs high-latency frames</span></p><p class="c0"><span style="overflow: hidden;<b> display</b>: inline-block;<b> margin</b>: 0.00px 0.00px;<b> border</b>: 0.00px solid #000000;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);<b> width</b>: 624.00px;<b> height</b>: 353.33px;"><img alt="" src="./index_files/Screenshot 2019-09-27 at 10.14.20.png" style="width: 624.00px;<b> height</b>: 353.33px; margin-left: 0.00px; margin-top: 0.00px;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c0"><span class="c2">In the above scenario, should we report the single dropped frame, or all the long frames that happened after it. Latency is already captured by event timing, so may be enough.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: is scrolling captured by Event Timing?</span></p><p class="c0"><span class="c2"><b>Tim</b>: we don’t do a good job of it today, but intent to make it work. Seems like we want to only surface the dropped frame.</span></p><p class="c0"><span class="c2"><b>Ilya</b>: why should developers care about latency?</span></p><p class="c0"><span class="c2"><b>Tim</b>: In cases of input, which Event Timing gives you</span></p><p class="c0"><span class="c2"><b>Noam</b>: for us (excel) 60Hz is not realistic…</span></p><p class="c0"><span class="c2">… when you switch to presentation mode, etc, we go down to 30Hz</span></p><p class="c0"><span class="c2"><b>Tim</b>: we could provide a skip threshold (e.g. min 2)</span></p><p class="c0"><span class="c2"><b>Todd</b>: as a web developer, how do I distinguish between 4hz vs 8hz vs 16hz…</span></p><p class="c0"><span class="c2"><b>Tim</b>: 2 cases. Changed rate vs. missed a frame. Maybe we need to surface refresh rate for FT entries.</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Is frequency exposed today? We tell developers to rely on that…</span></p><p class="c0"><span class="c2"><b>Tim</b>: Interval between rAFs, but that’s expensive to measure</span></p><p class="c0"><span class="c2"><b>Marcus</b>: different browsers do different things. Firefox will run rAF at 120Hz</span></p><p class="c0"><span class="c2"><b>Tim</b>: Need to surface something about the screen’s refresh rate for developers/analytics to make sense of this</span></p><p class="c0"><span class="c2"><b>Ilya</b>: if a developer aims at 60Hz rAF and then hits a system running at 120Hz, that’s a lot of skipped frames. What should they do with the telemetry. Surfacing refresh rate makes sense.</span></p><p class="c0"><span class="c2"><b>Todd</b>: Excel doesn’t care about anything faster than 30fps</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Makes sense to define what is long</span></p><p class="c0"><span class="c2"><b>Tim</b>: Maybe let pages say to report only X dropped frames in a row</span></p><p class="c0"><span class="c2"><b>Noam</b>: current rAF workarounds have many problems: expensive and impacts users. Also losing rIC calls.</span></p><p class="c0"><span class="c2">… Want more attribution for why a frame was dropped - would enable us to focus on where to optimize </span></p><p class="c0"><span class="c2"><b>Yoav</b>: do you need specific attribution or pointing towards the subsystem that caused it?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Specific attribution is a can of worms</span></p><p class="c0"><span class="c2"><b>Noam</b>: Would be great to have attribution for long tasks if we have it. But big buckets pointing towards rendering/JS/GC would be a good first step.</span></p><p class="c0"><span class="c2"><b>Olli</b>: and devtools profilers are not enough?</span></p><p class="c0"><span class="c2"><b>Noam</b>: Can use them only when you have a repro, and we typically don’t have the user’s content</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Can you explain issues reported by users?</span></p><p class="c0"><span class="c2"><b>Noam</b>: Trying to solve animation smoothness as well as responsiveness. But even if we knew when that happened, it’s hard to know what was the cause. </span></p><p class="c0"><span class="c2">… We’re measuring rAFs once user interacted, for 5 seconds. So we miss the initial interaction. Event Timing can help with that.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: so you want to measure all missing frames all the time?</span></p><p class="c0"><span class="c2"><b>Noam</b>: Any frame above 50ms. 30Hz is fine for us.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Why doesn’t event timing tackle your use-case?</span></p><p class="c0"><span class="c2"><b>Noam</b>: We get the event, we set a timer for 5 seconds, in which we measure the frame rate. Any interaction during the window, extends the window.</span></p><p class="c0"><span class="c2"><b>Todd</b>: dropped frames can be unrelated to input when another user is editing the spreadsheet</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: right now no concrete proposal for attribution for long frames. Seems complex</span></p><p class="c0"><span class="c2"><b>Noam</b>: attribution is not the key as long as we can capture everything</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: given your rAF polling, this will probably be useful for you</span></p><p class="c0"><span class="c2"><b>Todd</b>: first priority is getting rid of rAF, right?</span></p><p class="c0"><span class="c2"><b>Noam</b>: yeah. It will also enable us to collect more data for user analysis</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: can they detect bad ads OOP?</span></p><p class="c0"><span class="c2"><b>Todd</b>: yup, in busy systems</span></p><p class="c0"><span class="c2"><b>Marcus</b>: for Excel, long tasks should be sufficient</span></p><p class="c0"><span class="c2"><b>Tim</b>: Not really, because LT’s threshold may not fire. Also, Frame Timing can also account for compositor times in some platforms.</span></p><p class="c0"><span class="c2"><b>Todd</b>: Can we replace the idea of dropped frames with the idea of running that code only when there are frames to render?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Tricky because we may not produce frames when there’s nothing to produce. Also tricky due to visited links when we can’t expose if a frame was produced.</span></p><p class="c0"><span class="c2"><b>Marcus</b>: for the case of users hitting hard-to-reproduce issues, we ask them to capture a profile and send it.</span></p><p class="c0"><span class="c2"><b>Noam</b>: won’t work for us for many reasons.</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Tim</b>: how would analytics providers show that data?</span></p><p class="c0"><span class="c2"><b>Nic</b>: Already use rAF for short periods of time. Report average frame time.</span></p><p class="c0"><span class="c2"><b>Tim</b>: what do you surface?</span></p><p class="c0"><span class="c2"><b>Nic</b>: average frame rate. Tracking individual deltas to show where the long frames happened. Long frames and dropped frames would be more valuable</span></p><p class="c0"><span class="c2"><b>Tim</b>: Would your users use that data?</span></p><p class="c0"><span class="c2"><b>Nic</b>: if they can figure it out, kinda like long tasks. Data is not necessarily actionable</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0"><span class="c2"><b>Tim</b>: thoughts on reporting dropped frames vs. long frames?</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: we don’t “expect” frames, especially in variable frame rate scenarios?</span></p><p class="c0"><span class="c2"><b>Yoav</b>: Does it make sense to look at frame intervals?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Can be confusing when rate is variable. We can try to figure out what a definition of a “dropped frame” would look like and ask for feedback.</span></p><p class="c0"><span class="c2"><b>Todd</b>: Use cases I heard require correlating the frame with some action</span></p><p class="c0"><span class="c2"><b>Tim</b>: We’d surface timestamps</span></p><p class="c0"><span class="c2"><b>Todd</b>: And is it all about the compositor thread? If all frames are long, that’d impact responsiveness, but maybe event timing is good enough for that.</span></p><p class="c0"><span class="c2"><b>Tim</b>: yeah. Want to avoid penalizing cases where latency doesn’t matter.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: We may not know when a frame was dropped.</span></p><p class="c0"><span class="c2"><b>Tim</b>: You’d know on the main thread when a frame failed to produce</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: no. We don’t know what the deadlines are, so not know that we “missed”</span></p><p class="c0"><span class="c2"><b>Tim</b>: So can have a rough approximation, but not better</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: in some cases, we don’t even know that.</span></p><p class="c0"><span class="c2"><b>Todd</b>: What about long frames?</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: Seems clearer.</span></p><p class="c0"><span class="c2"><b>Simon Fraser</b>: Can report on the difference between scheduling the rendering update and the end of the rendering update. But JS can run between those.</span></p><p class="c0"><span class="c2"><b>Tim</b>: Also use cases doc has great examples, but maybe need more concrete examples.</span></p><p class="c0"><span class="c2"><b>Noam</b>: happy to provide more concrete use cases.</span></p><p class="c0"><span class="c2"><b>Todd</b>: screenshots with specific updates?</span></p><p class="c0"><span class="c2"><b>Tim</b>: yeah</span></p><p class="c0"><span class="c2"><b>Todd</b>: are you favorable of the idea in general?</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: the use case seems legit, the question is can it be useful and implementable</span></p><p class="c0"><span class="c2"><b>Tim</b>: Thanks for the feedback!</span></p><a id="id.vuigm9ujdgxm"></a><h2 class="c6" id="h.bctpgb6lsuwd"><span class="c18">Largest Contentful Paint</span></h2><h3 class="c8" id="h.u66dunbda1w8"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_b6edx5l9nuj7-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Mozilla wanted to hear feedback from shipping LCP in Chromium.</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Akamai would be able to correlate LCP scores to business metrics in a few months</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Mozilla and Apple curious about heuristics picked and process</span></li></ul><ul class="c3 lst-kix_b6edx5l9nuj7-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">Chrome can show filmstrip results and correlation to SpeedIndex</span></li></ul><ul class="c3 lst-kix_b6edx5l9nuj7-0"><li class="c0 c9 li-bullet-0"><span class="c2">User happiness is hard to measure</span></li></ul><ul class="c3 lst-kix_b6edx5l9nuj7-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">Wikipedia is using surveys</span></li></ul><h3 class="c8" id="h.njb6w8xvsj7"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Ben</b>: excluded background images?</span></p><p class="c0"><span class="c2"><b>Nicolás</b>: only for background of the body</span></p><p class="c0"><span class="c2"><b>Tim</b>: in our analysis we saw a large enough fraction, had to exclude it</span></p><p class="c0"><span class="c2"><b>Marcus</b>: want data regarding user satisfaction</span></p><p class="c0"><span class="c2"><b>Nic</b>: Can correlate business metrics to LCP scores in a few months</span></p><p class="c0"><span class="c2"><b>Tim</b>: Once we have the data, what’s the bar to adoption? It’ll be better than FCP but not necessarily great on its own. We can do a better job at surfacing anecdata</span></p><p class="c0"><span class="c2"><b>Todd</b>: also business metrics and user happiness are not the same. LCP could vary between sites. Slowing down sites could give us some data</span></p><p class="c0"><span class="c2"><b>Tim</b>: what does that give?</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: we can A/B test different heuristics</span></p><p class="c0"><span class="c2"><b>Yoav</b>: hard to collect user satisfaction</span></p><p class="c0"><span class="c2"><b>Gilles</b>: slowing down makes users go away for a while, so not ideal</span></p><p class="c0"><span class="c2"><b>Tim</b>: we can show anecdotes. Also correlation to SpeedIndex.</span></p><p class="c0"><span class="c2"><b>Alex</b>: A good way to find if LCP is a proxy for element timing. Once element timing is adopted, that would give us a good way to see if we hit or miss.</span></p><p class="c0"><span class="c2"><b>Gilles</b>: LCP might be useful for a websites that want to separate rendering of their site vs. the ads. Otherwise, most of the stuff will appear all at once. Studies we’ve done show that it’s poorly correlated. Have you looked at real world cases?</span></p><p class="c0"><span class="c2"><b>Tim</b>: yeah</span></p><p class="c0"><span class="c2"><b>Noam</b>: For excel it would measure the skeleton content more than the real content</span></p><p class="c0"><span class="c2"><b>Gilles</b>: Common case for SPAs</span></p><p class="c0"><span class="c2"><b>Tim</b>: So we have a heuristic for splashscreen. It would handle some cases but not all</span></p><p class="c0"><span class="c2"><b>Steven</b>: LCP is the best solution when we don’t have element timing. Need transitionStart to measure LCP with user satisfaction</span></p><p class="c0"><span class="c2"><b>Tim</b>: correlation data should be easier to get out than film strips</span></p><p class="c0"><span class="c2"><b>Todd</b>: LCP is multi-modal. Sites that measure user happiness scores can correlate those modes.</span></p><p class="c0"><span class="c2"><b>Gilles</b>: not clear how we evaluate LCP’s usefulness.</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: FCP is clearcut. LCP is more complex</span></p><p class="c0"><span class="c2"><b>Tim</b>: yeah, but FCP doesn’t correlate to user experience</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: sure, but not clear how we measure if this heuristic is good or bad</span></p><p class="c0"><span class="c2"><b>Gilles</b>: SpeedIndex is not great</span></p><p class="c0"><span class="c2"><b>Ilya</b>: SpeedIndex improvements had direct impact on business metrics</span></p><p class="c0"><span class="c2"><b>Ryosuke</b>: how much of the heuristic complexity is actually needed? If future pages change behavior, do we change the heuristics?</span></p><p class="c0"><span class="c2"><b>Tim</b>: Maybe we should be versioning these things?</span></p><p class="c0"><span class="c2"><b>Todd</b>: We’re all theorizing about what feels good, and have good data. But we don’t know how these things *feel* to users</span></p><p class="c0"><span class="c2"><b>Gilles</b>: need more systematic study to correlate to engagement and dollars</span></p><p class="c0"><span class="c2"><b>Todd</b>: On ad revenue sites, dollars don’t equate user happiness in many cases</span></p><p class="c0"><span class="c2"><b>Gilles</b>: collecting 24K user surveys a day. Saw happiness increase in spanish wikipedia, and that correlates to people upgrading devices. Didn’t pursue LCP, because Element Timing is better. </span></p><p class="c0"><span class="c2">&lt;ongoing discussion&gt;</span></p><p class="c0"><span class="c2"><b>Tim</b>: next steps?</span></p><p class="c0"><span class="c2"><b>Marcus</b>: sharing filmstrips and speedindex correlation would go a long way. Higher rigor would be great, but really hard. Also measuring correlation with the other metrics, where if it’s an independent variable would be more interesting.</span></p><h2 class="c6" id="h.ore7q2aehxl2"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/11k2ZU2ndoO-k32eWGzwsr9AUVa9AwteJpqARcKQveuI/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613252068001000&amp;usg=AOvVaw0HnMlWFNwL_CMntANDKvKt">Resource Timing Visibility</a></span></h2><h3 class="c8" id="h.mbnnoadwz32z"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_d2ax6n1cg0h6-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Akamai proposes same-origin iframes to be able to opt-in to report their entries to their same-origin parent</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Not just for ResourceTiming, but to be able to surface UserTiming/etc as well</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Opt-in via some sort of HTTP header or Feature-Policy (with * or origins specified)</span></li><li class="c0 c9 li-bullet-0"><span class="c2">They have partners that are interested in the API - would be good to talk to them directly to better understand the use case</span></li><li class="c0 c9 li-bullet-0"><span class="c2">Resource Timing is not consistent across browsers</span></li></ul><ul class="c3 lst-kix_d2ax6n1cg0h6-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">Apple not opposed to support the different sizes attributes, assuming TLS decoding is not included</span></li><li class="c0 c10 li-bullet-0"><span class="c2">Entries are not consistently reported (aborts, HTTP error codes, videos)</span></li></ul><h3 class="c8" id="h.rxchyho4dig5"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Nic</b>: Resource Timing doesn’t give you the full picture: no TAO, cross-origin iframes, so can be misleading. </span></p><p class="c0"><span class="c2">3 types of resources: full RT, restricted (no TAO) and invisible.</span></p><p class="c0"><span class="c2">Safari doesn’t support sizes</span></p><p class="c0"><span class="c2"><b>Alex</b>: No reason not to expose this if that data doesn’t include TLS overhead</span></p><p class="c0"><span class="c2"><b>Nic</b>: want to enable cross-origin iframes to opt-in to share their RT data with the parent</span></p><p class="c0"><span class="c2"><b>Tim</b>: Can people want to expose some entries but not others?</span></p><p class="c0"><span class="c2"><b>Nic</b>: heard people that want to surface UT, but may not want the rest</span></p><p class="c0"><span class="c2">Tim/Todd: we should start simple with an everything/nothing proposal</span></p><p class="c0"><span class="c2"><b>Tim</b>: site should be able to opt-in to a specific host</span></p><p class="c0"><span class="c2"><b>Nic</b>: 2 partners right now - 1 serving iframes from multiple origins, other is ad visibility network</span></p><p class="c0"><span class="c2"><b>Yoav</b>: would be good to bring those partners on a call</span></p><p class="c0"><span class="c2"><b>Will</b>: why are they not doing it in a hacky way right now? Would be interesting to hear that</span></p><p class="c0"><span class="c2"><b>Benjamin</b>: getting more accurate RT data would be a good thing this group can do</span></p><p class="c0"><span class="c2"><b>Tim</b>: value of RT data today?</span></p><p class="c0"><span class="c2"><b>Nic</b>: check resource sizes and check byte size</span></p><p class="c0"><span class="c2"><b>Tim</b>: unclear what the ad provider incentive would be</span></p><p class="c0"><span class="c2"><b>Nic</b>: some large companies can use that as a carrot for third parties</span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.kz34gz86yh74"><span class="c18">isFramePending</span></h2><h3 class="c8" id="h.bum5d0rssnhm"><span class="c11">TL;DR</span></h3><ul class="c3 lst-kix_2llezu98mfz9-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Discussed the different issues this proposal raises</span></li></ul><h3 class="c8" id="h.271i7qdok9hc"><span class="c11">Minutes</span></h3><p class="c0"><span class="c2"><b>Stefan</b>: very similar to isInputPending, but letting the developer know if there’s a rendering frame pending</span></p><p class="c0"><span class="c2">Large frameworks expressed interest. </span></p><p class="c0"><span class="c2">Issues:</span></p><ul class="c3 lst-kix_pe9j1dva1e2f-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Violates “run to completion” semantics - same as isInputPending</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-1 start"><li class="c0 c10 li-bullet-0"><span class="c2"><b>Tim</b>: the fact that it’s a method call makes this simpler</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-0"><li class="c0 c9 li-bullet-0"><span class="c2">Testability - hard to write WPTs</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">&lt;discussion on rendering opportunities&gt;</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Tim</b>: should be when rAF is scheduled, not at vsync time</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Smfr</b>: in iOS the vsync is handled on the main loop, so this will be difficult</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-0"><li class="c0 c9 li-bullet-0"><span class="c2">Detects dirty render</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-1 start"><li class="c0 c10 li-bullet-0"><span class="c2"><b>Tim</b>: Visited links and cross-process iframes?</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Stefan</b>: we schedule a frame anyway in those cases</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-0"><li class="c0 c9 li-bullet-0"><span class="c2">Detects process isolation</span></li></ul><ul class="c3 lst-kix_pe9j1dva1e2f-1 start"><li class="c0 c10 li-bullet-0"><span class="c2"><b>Tim</b>: also allows you to know if a cross-process iframe is producing frames, if you’re not process isolated</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Todd</b>: Could also do “when is a render step going to run”</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Stefan</b>: on some platforms we get explicit vsync and on some we don’t, so we need to ask the OS for a frame. If we’re not explicitly asking vsync, we’d get timer skew. Important case is when we’re not constantly animating</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Tim</b>: maybe we can lie on the first frame</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Stefan</b>: as long as it’s possible to specify and answers the use-case</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Marcus</b>: Can we request a vsync once it’s called?</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Stefan</b>: would prevent us from running e.g. 100ms of uninterruptible script. Would be sad if we have to schedule a frame</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Todd</b>: Is uninterruptible script a goal?</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Stefan</b>: need to talk to partners</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Alex</b>: might be nice to allow scheduler writers to unite isInputPending and isFramePending. isSomethingPending that returns an enum</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Stefan</b>: need to figure out if detectability of dirty render is really a problem</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Tim</b>: Use cases document please</span></li><li class="c0 c10 li-bullet-0"><span class="c2"><b>Alex</b>: prototype implementation? Would be good to show before/after</span></li></ul><p class="c0"><span class="c2">&nbsp;</span></p><h2 class="c6" id="h.4csogixbt0to"><span class="c18">Spec review</span></h2><h3 class="c8" id="h.xsc5w914e1ut"><span class="c11">Performance Timeline L2</span></h3><p class="c0"><span>AI [</span><span>plh, siusin</span><span class="c2">]: transition to CR, send out call for review</span></p><p class="c0"><span class="c2"><b>AI</b>: fix the flaky case sensitivity test and Frozen array test on supportedEntryTypes</span></p><p class="c0"><span>AI</span><span class="c2"><b></b>: re-republish the WD from L2</span></p><h3 class="c8" id="h.qvx1r0y7ozk4"><span class="c11">Resource Timing L2</span></h3><p class="c0"><span>AI [</span><span>plh, siusin</span><span class="c2">]: send out call for review; not blocking on closing all issues</span></p><p class="c0"><span>AI [</span><span>plh, siusin</span><span class="c2">]: transition L1 to REC No open issues</span></p><h3 class="c8" id="h.fychg5hyi9sr"><span class="c11">Navigation Timing L2</span></h3><p class="c0"><span>AI [</span><span>plh, siusin</span><span class="c2">] send out call for review</span></p><h3 class="c8" id="h.d9q8vvmb35w0"><span class="c11">User Timing L3</span></h3><p class="c0"><span>AI [</span><span>Nicolás</span><span>] add Chrome use counters </span></p><p class="c0"><span>AI [</span><span>philip</span><span>] </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/user-timing/milestones/Level%25203&amp;sa=D&amp;source=editors&amp;ust=1613252068015000&amp;usg=AOvVaw2vvLvczbkDIrQl5SXbQkHU">fix explainer</a></span><span class="c2">, reach out + do some activation</span></p><h3 class="c8" id="h.bczcybj6ju27"><span class="c11">Page Visibility L2</span></h3><p class="c0"><span>AI [</span><span>todd</span><span class="c2">] chat w/ PLH about need, or not, for wide review</span></p><p class="c0"><span>AI [</span><span>todd</span><span>] </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/page-visibility/milestones/Level%25202&amp;sa=D&amp;source=editors&amp;ust=1613252068018000&amp;usg=AOvVaw3awWhrGlSV84PRdTrIvfLB">https://github.com/w3c/page-visibility/milestones/Level%202</a></span></p><h3 class="c8" id="h.1a85o1tv63xu"><span class="c11">Beacon L1</span></h3><p class="c0"><span>AI [] fix failing WPT, otherwise “ready to go”</span></p><h3 class="c8" id="h.bz3wartv9t3x"><span class="c11">requestIdleCallback L1</span></h3><p class="c0"><span>AI [</span><span>yoav</span><span>] Resolve </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/requestidlecallback/pull/78&amp;sa=D&amp;source=editors&amp;ust=1613252068019000&amp;usg=AOvVaw0xd82fVn-hzEH-l2XgY6_Y">https://github.com/w3c/requestidlecallback/pull/78</a></span><span class="c2">&nbsp;→ REC, have 2 green implementations</span></p><h3 class="c8" id="h.ld65byim4zjo"><span class="c11">Preload L1</span></h3><p class="c0"><span class="c2">AI [?] defining Preload cache is a blocker</span></p><h3 class="c8" id="h.21angvgyt5xl"><span class="c11">Server Timing L1</span></h3><p class="c0"><span>AI [</span><span>plh, siusin</span><span class="c2">]: send out call for review</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.nifunbmf0cr1"><span class="c18">Test Triage</span></h2><ul class="c3 lst-kix_4yi9ah5123x9-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Performance Timeline</span></li></ul><ul class="c3 lst-kix_4yi9ah5123x9-1 start"><li class="c0 c10 li-bullet-0"><span class="c2">Flaky test</span></li></ul><ul class="c3 lst-kix_4yi9ah5123x9-0"><li class="c0 c9 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/200&amp;sa=D&amp;source=editors&amp;ust=1613252068021000&amp;usg=AOvVaw23ScTTiyCG4AmohbrxrTQK">https://github.com/w3c/resource-timing/issues/200</a></span></li><li class="c0 c9 c5 li-bullet-0"><span class="c2"></span></li></ul><p class="c0 c5"><span class="c2"></span></p><h2 class="c6" id="h.c0q4xstplujo"><span class="c18">Hackathon Issue Discussion</span></h2><ul class="c3 lst-kix_r0dvroh27d45-0 start"><li class="c0 c9 li-bullet-0"><span class="c2">Navigation Timing</span></li></ul><p class="c0"><span>Boris raised 2 issues. </span><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/114&amp;sa=D&amp;source=editors&amp;ust=1613252068022000&amp;usg=AOvVaw2SX2tABADwPfyTybkIkiNw">#114 - Spec for PerformanceNavigationTiming.type does not match any implementations</a></span><span class="c2">&nbsp;- hopefully only definition change + tests, so no need for discussion</span></p><ul class="c3 lst-kix_a9brwreve9ax-1"><li class="c0 c10 li-bullet-0"><span class="c13"><a class="c19" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/115&amp;sa=D&amp;source=editors&amp;ust=1613252068022000&amp;usg=AOvVaw1mdK_g3wGbWQ5d6lf5WtVd">#115 - Definition of "back_forward" navigation type does not make sense</a></span><span class="c2">&nbsp;- discuss desired behavior</span></li></ul><p class="c0"><span class="c2">Yoav, Will and Todd discussed and agreed that for location.href, the type should be back_forward before location.href is set and navigate after the location.href navigation. The spec should be reviewed to ensure the language allows for this. For a redirect after a back navigation, the final type should be navigate. The spec should be reviewed to ensure the language allows for this. It is likely that the HTML spec must be updated and then the Navigation Timing spec will need to reference.</span></p><p class="c0 c5"><span class="c2"></span></p><p class="c0 c5"><span class="c2"></span></p></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjowOeGVHnvL1M7IIze8q61GK4Bq8I-Qj4OK0XgzvmQhealgEM7ay7oKhcVUlKimRlIv6-6RSI_dic32gk6A:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>